这是我参与新手入门的第3篇文章markdown
prototype:原型 ->函数的一个默认属性:prototype:对象函数
__proto__
:原型链 -> Object(引用类型)的一个属性(__proto__
:对象)this
每一个Object(引用类型)的__proto__对应着里该Object里的constructor的prototypespa
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__ //不存在
}
}
}
复制代码
因此能够这样说prototype
原型链 是以一个对象为基准,以__proto__ 为链接的这条链条,直到以Object 点上的prototype 为止的链叫作原型链。code
以对象原型为节点,连起来的一条线即为原型链orm
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 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对象
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
复制代码
以上的原型链的相关知识,是以简单方法理解。实际开发中,原型链的相关知识是相对复杂的,但愿能以小见大的方式,去理解原型,原型链的相关知识。
若是以为还行,请不要吝啬你的小赞赞哦。