创建对象
JavaScript对每个创建的对象都会设置一个原型,指向它的原型对象。
当我们用 obj.xxx 访问一个对象的属性时,JavaScript引擎先在当前对象上查找该属性,如果没有找到,就到其原型对象上找,如果还没有找到,就一直上溯到 Object.prototype 对象,最后,如果还没有找到,就只能返回 undefined 。
例如,创建一个 Array 对象:
var arr = [1, 2, 3];
其原型链是:
arr ——> Array.prototype ——> Object.prototype ——> null
Array.prototype 定义了 indexOf() 、 shift() 等方法,因此你可以在所有的 Array 对象上直接调用这些方法。
当我们创建一个函数时:
function foo() {
return 0;
}
函数也是一个对象,它的原型链是:
foo ——> Function.prototype ——> Object.prototype ——> null
由于 Function.prototype 定义了 apply() 等方法,因此,所有函数都可以调用 apply() 方法。
很容易想到,如果原型链很长,那么访问一个对象的属性就会因为花更多的时间查找而变得更慢,因此要注意不要把原型链搞得太长。