TWO DAY

233 阅读1分钟

原型和原型链

先使用构造函数创建一个对象

function Obj(){

} var obj = new Obj();

obj.name = '小明';

console.log(obj.name); //小明

prototype属性:每一个函数里面都有一个prototype属性.

Obj.prototype.name = '小狗';

var obj1 = new Obj();

var obj2 = new Obj();

console.log(obj1.name);//小狗

console.log(obj2.name);//小狗

函数中的prototype属性指向了一个对象,这个对象是调用该构造函数而创建的实例的原型,这个对象是调用该构造函数而创建的实例的原型,也就是例子中的obj1和obj2的原型

原型

每一个JavaScript对象(除null外)在创建的时候就会与之关联另一个对象,这个对象就是我们说的原型对象,每一个对象都会从原型“继承”属性

_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(){

}

Person.prototype.name = '小虎'

var person = new Person();

person.name = '小明'

console.log(person.name)//小明

delete person.name;

console.log(person.name)//小虎