js:构造函数、原型、实例的关系。

224 阅读1分钟
function Animal (type, size){
    this.type = type;
    this.size = size;
}

构造函数

Animal, 函数名即构造函数functionname,跟普通js函数无明显差别,用new即实例化对象,不用new即调用方法。

prototype属性

Animal.prototype.info = function(){
    console.log(`type:${this.type},size:${this.size}`)
}

每个构造函数都有一个prototype属性,类似于一个指针,指向原型对象

原型对象

同类不同实例之间的共享方法和属性可放在prototypez指向的原型对象中。

constructor (原型对象的constructor)

原型对象都含有一个指向构造函数的指针

Animal.prototype.constructor === Animal // true

实例

var dog = new Animal('dog', 'small');
var tiger = new Animal('tiger', 'big');

new出来的变量,dog,tiger都是。

propo

每个实例都有一个__propo__属性,相当于一个指针,也指向原型对象,即

dog.__proto__ === Animal.prototype //true
tiger.__proto__ === Animal.prototype//true

tips

重写原型对象将会切断现有实例与新原型之间的联系