博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
JavaScript语言核心(一)-- 原型prototype 及 原型链__proto__
阅读量:6077 次
发布时间:2019-06-20

本文共 2075 字,大约阅读时间需要 6 分钟。

原型模式: 产生新对象方式 是从一个已知的对象clone而来。

JavaScript所有的对象,都是从一个对象克隆而来;语言层面上支持这种模式 Object.create()

  • var obj = new Type();
  • var obj = {}

JavaScript 引擎帮我完成了,克隆的过程,并且对象记住了它的原型 [[proto]]

 

祖先原型对象:Object.prototype ,所有非显示指定原型的对象的 __proto__ 都是指向它

祖先函数对象: Object、Function

Object.__proto__  -->  Function.prototype    

Function.prototype.__proto__ --> Object.prototype

Object.prototype.__proto__ --> null

 

Function.__proto__ ---> Function.prototype  自己的原型创建自己

 

 

类似C++强类型静态语言中,类型 决定了 值具备的属性及method。设计好的类型在running的过程中,无法变更

JavaScript弱类型 动态语言中没有 class 即 语言中是"没有类型",对象的类型 是由运行过程中的值决定。

  1. 本类型不具备的方法借用其他类型的方法
  2. 扩展其他类型
字符串类型 不具备join方法,但可以借用 其他类型 Array中的方法let str = 'foo';var res = Array.prototype.join.call(str,'-');//output:'f-o-o'在 Number.prototype 对象上,部署一个 iterate 方法Number.prototype.iterate = function () {  var result = [];  for (var i = 0; i <= this; i++) {    result.push(i);  }  return result;};(8).iterate()// [0, 1, 2, 3, 4, 5, 6, 7, 8]

值 与 类型(值类型 及 引用类型)

in  instanceof  hasOwnProperty  typeof

基本6中类型:Number、String、Object、null、undefined、Boolean。

其中Array及Function是Object的子类型。

所有 typeof返回值是"object"的对象,其内部都包含 内部属性[[Class]],通过

Object.prototype.toString()来访问

Object.prototype.toString.call(item) === '[object Array]';

 C++中对赋值参数的传递,通过 value-copy 与 reference-copy,是由语法来决定,比如显示 int& para;

而JavaScript中完全是由值的类型来决定。

`JavaScript 一切皆对象` 这句话有问题,比如标量类型的值,就不是对象(不具备属性及方法)var a = 2;a.toString();a.xy = 'hahha'而相应的C#确实现了一切皆对象http://www.cnblogs.com/mrcooldog/archive/2008/03/03/1088769.html

 

 

标量基本类型值:字符串、数值、布尔、symbol  它们有相应的封装类型  String()  Number()(类似其它语言中 boxing与unboxing)

复合类型值--对象:数值、函数、自定义对象。

let a = 3;let b = a; // value-copy;let d = [1,2,3];let c = d; // reference-copy;

 

 

JavaScript对象分为两种类型

  • 普通对象
  • 函数对象

普通对象包括:new obj、{}、prototype

函数对象:function(){}

所有对象都具备 __proto__属性,它构成了 继承链表,在某些浏览器环境下,无法访问到该属性。对象__proto__的默认值是

Object.prototype;而 Object.prototype.__proto__ = null 意味着继承链的终结。

只有函数对象具有prototype对象。

原型对象其实就是
普通对象  即:console.log(f1.prototype)  //"object"
Function.prototype除外,它是
函数对象,但它很特殊,它
没有prototype属性
var o = new Obj();解析为:var o = {};o.__proto__ = Obj.prototype;Obj.call(o);

 

转载于:https://www.cnblogs.com/rhinoxy/p/5929961.html

你可能感兴趣的文章
java web轻量级开发面试教程摘录,java web面试技巧汇总,如何准备Spring MVC方面的面试...
查看>>
根据调试工具看Vue源码之组件通信(一)
查看>>
Thrift RPC 系列教程(5)—— 接口设计篇:struct & enum设计
查看>>
斯坦福-随机图模型-week1.5
查看>>
灵活的运用Model类
查看>>
hadoop 之分布式安装
查看>>
使用ansible工具部署ceph
查看>>
linux系列博文---->深入理解linux启动运行原理(一)
查看>>
Android反编译(一) 之反编译JAVA源码
查看>>
结合当前公司发展情况,技术团队情况,设计一个适合的技术团队绩效考核机制...
查看>>
python-45: opener 的使用
查看>>
cad图纸转换完成的pdf格式模糊应该如何操作?
查看>>
Struts2与Struts1区别
查看>>
网站内容禁止复制解决办法
查看>>
Qt多线程
查看>>
我的友情链接
查看>>
Ubuntu12.04 编译android源代码及生成模拟器经历分享
查看>>
KVM网络桥接设置方法
查看>>
Puppet学习手册:Puppet Yum安装
查看>>
我的友情链接
查看>>