对应名称 及对应关系
-
prototype:原型 ->函数的一个默认属性:prototype:对象
-
__proto__
:原型链 -> Object(引用类型)的一个属性(__proto__
:对象) -
每个Object(引用类型)的__proto__对应着里该Object里的constructor的prototype
原型链的理解
function Test() {
this.a = 1;
}
let test = new Test();
Test.prototype.b = 2;
console.log(Test.__proto__ === Function.prototype); // true
console.log('===', Test.prototype.__proto__ === Object.prototype); // true
// 见function与Object 的特殊性
可以总结为:
test{
a:1,
__proto__:Test.prototype={
b:2,
_proto__:Object.prototype={
__proto__ //不存在
}
}
}
复制代码
所以可以这样说
原型链 是以一个对象为基准,以__proto__ 为连接的这条链条,直到以Object 点上的prototype 为止的链叫做原型链。
以对象原型为节点,连起来的一条线即为原型链
原型链的继承的理解
function Test() {
this.a = 1;
}
let test = new Test();
Test.prototype.b = 2;
console.log(test.a) // 1
console.log(test.b) // 2
当在test的直接对象里,没有找到b 属性,就回去test.__proto__里去找b 属性,这叫原型链的继承
function Test() {
this.a = 1;
this.b = 222;
}
let test = new Test();
Test.prototype.b = 2;
可以总结为
test{
a:1,
b:222,
__proto__:Test.prototype={
b:2,
_proto__:Object.prototype={
__proto__ //不存在
}
}
}
console.log(test.b) // 222 当test的直接对象里,含有b属性,则不再去__proto__里去找b属性
复制代码
Function 与 Object 的特殊性 (函数,对象)
Function
function Test(){}
底层实现:上述代码 function Test(){},是通过new Function() 构造出来的
// eg: const Test = new Function();
// console.log(Function.__proto__)
// console.log(Function.prototype)
// console.log(Function.__proto__ === Function.prototype) // true 特殊点记忆
复制代码
Function.__proto__
=== Function.prototype
Object
const obj = {};
底层实现 const obj = new Objcec();
又typeof Object === 'function' ,function 底层又是通过new Function 构造出来的,
故 console.log(Object.__proto__ === Function.prototype) // TRUE
//console.log(Object.__proto__ === Function.__proto__)
复制代码
Object.__proto__
=== Function.__proto__
Object.__proto__
=== Function.__proto__
判断属性存在的方法
// 当我看我的直接对象里是否有某个属性,可以通过hasOwnProperty('')来进行判断
test{
a:1,
__proto__:Test.prototype={
b:2,
_proto__:Object.prototype={
__proto__ //不存在
}
}
}
console.log(test.hasOwnProperty('a')); // true
console.log(test.hasOwnProperty('b')); //false
当判断对象所对应的原型链上是否有某种属性
consle.log('a' in test) //true
console.log('b' in test) // true
只要在链上,就为true
复制代码
总结
以上的原型链的相关知识,是以简单方法理解。实际开发中,原型链的相关知识是相对复杂的,希望能以小见大的方式,去理解原型,原型链的相关知识。
如果觉得还行,请不要吝啬你的小赞赞哦。b
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END