标签:原型对象 highlight div asc lse 内存结构 eof 创建对象 别名
prototype
)函数的 prototype
属性(图)
prototype
属性,它默认指向一个Object
空对象(即称为:原型对象)constructor
,它指向函数对象给原型对象添加属性(一般都是添加方法)
function
都有一个prototype
属性,即 显式原型__proto__
,可称为隐式原型 ===
其对应构造函数的显示原型的值总结:
prototype
属性:在定义函数时自动添加的,默认值是一个空的Object
对象__proto__
属性:创建对象时自动添加的,默认值为构造函数的prototype
属性值ES6
之前)
访问一个对象的属性时,
__proto__
这条链向上查找,找到返回undefined
var o1 = new Object()
var o2 = {}
下面这个图需要仔细理解。
instanceof
instanceof
是如何判断的?A instanceof B
B
函数的显式原型对象在A
对象的(隐式)原型链上,返回true
,否则返回false
Function
是通过new
自己产生的实例function Foo() { } var f1 = new Foo(); console.log(f1 instanceof Foo); // true console.log(f1 instanceof Object); // true
console.log(Object instanceof Function); // true console.log(Object instanceof Object); // true console.log(Function instanceof Function); // true console.log(Function instanceof Object); // true function Foo() {} console.log(Object instanceof Foo); // false
注意:Function
的显示原型和隐式原型是一样的。
var A = function() { } A.prototype.n = 1 var b = new A() A.prototype = { n: 2, m: 3 } var c = new A() console.log(b.n, b.m, c.n, c.m) // 1 undefined 2 3
var F = function(){}; Object.prototype.a = function(){ console.log(‘a()‘) }; Function.prototype.b = function(){ console.log(‘b()‘) }; var f = new F(); f.a() // a() f.b() // 报错 f.b is not a function F.a() // a() F.b() // b()
对照下图理解:
标签:原型对象 highlight div asc lse 内存结构 eof 创建对象 别名
原文地址:https://www.cnblogs.com/chenyablog/p/11275395.html