一,概念
每个对象都可以有一个原型 _proto_ , 这个原型还可以有它自己的原型,直到某个对象的原型为 Null 为止(也就是不再有原型指向),组成这条链的最后一环, 这种一级一级的链结构 就称为原型链(prototype chain)
JavaScript 对象是动态属性“包”(指其自己的属性)。JavaScript 对象有一个指向一个原型对象的链,当试图访问一个对象的属性时,它不仅在该对象上搜寻,还会搜寻该对象的原型,以及该对象的原型的原型,依次层层向上搜索,直到找到一个名字匹配的属性或到达原型链的末尾。
var o = {
a:1,
b:2
};
console.log(o.toString());
//不报错,o上没有toString方法,但是Object上有
console.log(o.push("c"));
//报错,o上没有这个方法,Object上也没有这个方法。
console.log(o.a); //1
console.log(o.c); //undefined
当你用new Object或者直
当你访问 o 上没有的属性或方法时, JS 会往 Object.prototype 上寻找该属性和方法, 如果有则直接返回,如果没有,方法则报错,这个方法未定义,属性则返回undefined.
function Person(name){
this.name = name;
}
Person.prototype = {age:24};
var tsrot = new Person("tsrot");
console.log(tsrot.name); //tsrot
console.log(tsrot.age); //24
console.log(tsrot.toString()); //[object Object]
当你用构造函数(构造函数我们一般首字母大写)建立一个对象时,它的原型链就是
tsrot ==》 Person.prototype ==》 Object.prototype ==》 null