原型和原型链
对应名称
prototype: 原型
__proto__: 原型链(连接点)
从属关系
prototype --> 函数的一个属性: 对象 {}
__proto__ --> 对象Object的一个属性; 对象{}
原型
原型链
原型链的长度:
执行下面步骤
:仔细看看,一看就懂什么是原型链
对象的__proto__保存着该对象的构造函数的prototype
function Test() {
this.a =1;
}
const test = new Test();
Test.prototype.b =2;
Object.prototype.c = 3;
test {
a: 1,
__proto_: Test.prototype {
b: 2,
__proto__: Object.prototype {
// Object.prototype顶层的属性
c:3
//无__proto__属性
}
}
}
Function 和 Object的特殊性
//底层:
//const Test = new Function();
Function.__proto__ === Function.prototype; //true
//底层:
// const obj = {};
// const obj = new Object(); obj也是一个Function
Object.__proto__ === Function.prototype; // true
Object.__proto__ === Object.__proto__; //true
constructor: 实例化test对象的构造函数
function Test() {
a: 1
};
const test = new Test();
console.log(test.constructor);
//输出
// function Test() {
// a: 1
// };
constructor可以被修改
注意点:
proto 并不是语言本身的特性,这是各大厂商具体实现时添加的私有属性,虽然目前很多现代浏览器的 JS 引擎中都提供了这个私有属性,但依旧不建议在生产中使用该属性,避免对环境产生依赖。生产环境中,我们可以使用 Object.getPrototypeOf 方法来获取实例对象的原型,然后再来为原型添加方法/属性。