4

下面的代码将记录 a、a.length 和 b.test。a 和 b.test 都产生 [1, 2, 3]。编辑——我搞砸了。b.test 产生未定义的结果。请参阅下面 Raina 的回复。

a.length 产生 3。

b.test.length 失败,“无法读取未定义的属性‘长度’”

为什么当 a 和 b.test 相等时会出现这种情况?


var a = [1,2,3];

var b = function(){};

b.prototype.test=[1,2,3];

console.log(a);

console.log(a.length);

console.log(b.test);

console.log(b.test.length);
4

1 回答 1

5

因为b没有test属性——它是一个函数,它的原型对象Function.prototype一个。

但是使用此函数创建的对象将在其原型链中具有此属性(作为指向已定义属性的对象的prototype 属性,所以这...btest

console.log(new b().test.length);

... 应该给你 3,正如预期的那样。

于 2012-12-23T17:55:53.157 回答