js原型理解

234 阅读1分钟

一. js原型

1. prototype

每个函数对象都有一个prototype属性,这个属性的指向被称为该函数对象的原型对象。

function Person(age) {
    this.age = age       
}

Person.prototype.name = 'kavin'

var person = new Person()
console.log(person.name) //kavin

函数的prototype指向了一个对象,这个对象正是调用构造函数时创建的实例的原型,也就是person的原型。

2 . __ proto __

这是每个对象(除null外)都会有的属性,叫做__proto__,这个属性会指向该对象的原型。
function Person() {

}
var person = new Person();
console.log(person.__proto__ === Person.prototype); // true
补充
绝大部分浏览器都支持这个非标准的方法访问原型,
然而它并不存在于 Person.prototype中,实际上,
它是来自于 Object.prototype ,与其说是一个属性,
不如说是一个 getter/setter,当使用 obj.__proto__ 时,
可以理解成返回了 Object.getPrototypeOf(obj)。

3. constructor

每个原型都有一个constructor属性,指向该关联的构造函数。
function Person() {

}
console.log(Person===Person.prototype.constructor)  //true

原型属性关系 原型属性关系.png