欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

原型链再理解

程序员文章站 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

原型链再理解

相关标签: 前端开发