js的对象有一个特殊的[[prototype]]内置属性,其实是对于其他对象的引用。几乎所有的对象在创建时[[prototype]]属性都会被赋予一个非空的值。
查看以下代码
var myObject = {
a:2;
}
myObject.a;//2
prototype属性有什么用呢?
之前说过在访问对象属性的时候会触发get操作,比如myObject.a。
对于默认的get操作来说,第一步是检查自身是否有这个属性,如果自身不存在就查看prototype链。
栗子:
var other = {
a:2
};
var object = Object.create(other);
object.a; //2
Object.create(x)创建一个对象将其的prototype指向x
1.原型链的尽头在哪
所有普通的prototype链最终都会指向内置的Object.prototype。由于所有的“普通”对象都源于这个Object.prototype对象,所以它包含了JS中许多通用的功能。
2.prototype属性是什么?
function foo() {
//...
}
Foo.prototype;//{}
所有的函数默认都会拥有一个名为prototype的公有的并且不可枚举的属性,它会指向另一个对象。
这个对象通常被称为原型