前面我们谈到了普通对象的__proto__属性,使得普通对象的原型对象可以为任意对象,从而达到继承原型对象属性的目的。
接下来,我们来了解一下prototype和原型链的概念。
当我们用obj.xxx访问对象属性的时候,JavaScript引擎会先在该对象上查找xxx属性,如果obj上没有xxx属性,那么就会在obj的原型对象上查找,如果还没找到,就会一直上溯到Object.prototype对象,最后,如果还没找到,就会返回undefined。
例如,创建一个数组:
var arr = [1,2,3]
那么arr的原型对象就是Array.prototype。它的原型链是:arr--->Array.prototype--->Object.prototype--->null,Array.prototype上定义了很多方法,如valueof(),shift(),pop(),push(),indexof()等,arr都可以直接调用这些方法。
如果我们创建一个函数:
function f1(){ return 0; }
那么f1的原型对象就是Function.prototype。它的原型链是:f1--->Function.prototype--->Object.prototype--->null,Function.prototype上定义了很多方法,如apply(),bind(),call()等,f1都可以直接调用这些方法。
浙公网安备 33010602011771号