为什么普通对象没有length属性,而唯独arguments等类数组对象拥有length属性?
以下是我还疑惑的地方:
现在才知道:
原来所有的我所认为的类(string等)其实都不过是构造函数,因为是函数所以都继承Function.prototype;原来函数都具有length和prototype属性,且length属性只示自身,其原型属性并没有。关于原型链,我有研究过的,查找属性是沿着原型链;类比过作用域链,查找变量是沿着作用域链的。
关于我提出的问题,结合你提供的信息,我对其的解释是:
因为普通的实例化一个对象,他们也就继承自Object.prototype原型的属性和方法,而继承的原型对象是没有length属性的,所以使用length属性的结果就是undefined。
对于arguments对象,我还是有点疑惑:
alert(typeof arguments); // object ---->这说明他是object 而不是 function
alert(Object.getPrototypeOf(arguments)); //[object Object] ---->结合上面的结果object,说明:
arguments所继承的原型是Object.prototype,而Object.prototype是没有定义length属性的,所以length属性是arguments这个对象所特有的??是ECMAscript标准里面定义好的??因为同样是对象,如 var obj={x:'hello',y:'boy'} ,同样继承Object.prototype原型对象,但是他们却没有length这样的自有属性。
慕斯王
三国纷争