原型链再理解
程序员文章站
2022-06-11 21:42:29
...
这篇文章带你彻底弄懂 普通构造函数、Object、Function之间的关系!!!
参考原型链那点事儿
一. 普通构造函数
例如:
function F(){
let person = {
name: 'pcm'
}
}
F.prototype.age = 30;
每一个对象都有一个__proto__
属性,这个对象的__proto__
指向它的原型对象。
- f是一个对象,这个对象的
__proto__
指向它(F)的构造函数 - 构造函数也是一个对象,那么它也必然会有一个
__proto__
属性,这个属性指向它(Function)的原型对象。
示例图如下:
function F(){
let person = {
name: 'pcm'
}
}
F.prototype.age = 30;
console.log(Function.__proto__) //ƒ () { [native code] }
console.log(Function.prototype) // ƒ () { [native code] }
console.log(F.__proto__ === Function.__proto__) //true
二. Object对象
上面的F()函数是程序员自己定义的,对于function Object()也是一样,Object其实也是一个函数,只不过系统为我们在Object的原型对象上默认添加了一些属性和方法。
function F(){
let person = {
name: 'pcm'
}
}
F.prototype.age = 30;
console.log(Object.__proto__ === Function.prototype) //true
console.log(Object.prototype) //{constructor: ƒ, __defineGetter__: ƒ, __defineSetter__: ƒ, hasOwnProperty: ƒ, __lookupGetter__: ƒ, …}
let f = new F();
console.log(f.__proto__.__proto__) // {}
console.log(f.__proto__.__proto__.__proto__) //null
console.log(F.__proto__.__proto__) // {}
console.log(Function.__proto__) // ƒ () { [native code] }
三. 对于JavaScript提供的其他对象
对于JavaScript提供的其他函数,例如Number、RegExp、String等等
String.prototype.__proto__ === Object.prototype
上一篇: Redis学习日志(三)