深入理解原型 到原型链
探究
prototype __proto__ constructor
构造函数创建对象
我们知道我们可以直接定义对象 或者可以用 构造函数的方法创建对象
function Person() {
}
var person = new Person();
person.name = 'kkkl';
console.log(person.name) //kkkl
prototype
每个函数都有一个prototype属性
function Person(){
}
//prototype是函数才会有的属性
Person.prototype.name='kkkl';
var person1=new Person();
var person2=new Person();
console.log(person1.name)//kkkl
console.log(person2.name)//kkkl
那这个函数prototype 指向的是什么呢
函数的prototype属性指向了一个对象,这个对象正是构造函数创建的实例的原型
也就是这个例子中的person1和person2的原型
现在我们就知道什么是原型了 (原型就是prototype指向的对象 这个对象就是我们所说的原型,每一个对象都会从原型"继承"属性。)
可以用一张图便是构造函数和实例原型之间的关系‘
那我们该怎么表示实例与实例原型之间的关系呢 ,也就是person 和Person.prototype 的关系
这时候就会出现第二个属性
__proto__
每个javascript对象(除了null)都具有一个属性,叫做
__proto__
这个属性会指向该对象的原型。
实例
function Person() {
}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true
现在来更新上面的图片
那既然 实例对象个构造函数都可以指向原型 那么原型是否有属性指向构造函数或者实例呢
constructor
这个可以指向构造函数
每个原型都有一个constructor属性指向关联的构造函数
function Person() {
}
console.log(Person === Person.prototype.constructor); // true
function Person() {
}
var person = new Person();
console.log(person.__proto__ == Person.prototype) // true
console.log(Person.prototype.constructor == Person) // true
参考
https://gist.github.com/sttk/9e83d802c4a1a2f24fab807b0644a8db
标签:__,proto,Person,person,原型,constructor,prototype,构造函数
From: https://www.cnblogs.com/kkkkl/p/16878930.html