原型和原型链
先使用构造函数创建一个对象
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)//小虎