Javascript - 在尝试获取数组原型时获取'undefined'

时间:2009-03-23 11:53:36

标签: javascript prototype

我认为早上5点人才流失,但我对此有所了解。

obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"

为什么obj.prototype不返回函数Array(){ }作为原型?它确实引用Array作为构造函数。

5 个答案:

答案 0 :(得分:7)

因为实例没有原型,所以类*可以。

您可能需要obj.constructor.prototypeobj.constructor==Array

* 更准确,构造函数有原型,但当然在JS functions = classes = constructors

答案 1 :(得分:1)

我不确定您是否可以从对象的实例访问prototype对象。以下行为可能对您有所帮助:

alert(Array); // displays "function Array() { [native code] }"
alert(Array.prototype); // displays ""
alert(['a','b'].constructor); // displays "function Array() { [native code] }"

obj.prototype没有返回function Array() { ... },因为那是对象的构造函数。

答案 2 :(得分:1)

在您的示例中,objArray的实例,而不是类Array本身。

理解它的另一种方法是,例如,您不能从对象(或类)的实例继承,您只能从对象(或类)本身继承,在您的示例中,这意味着您可以从Array对象继承,但不能从Array对象的直接实例继承,例如obj

答案 3 :(得分:1)

根据ECMA规范,对象的原型链接不可见,但大多数现代浏览器(firefox,safari,chrome)都可以通过__proto__属性看到它,所以请尝试:

obj = ['a','b'];
alert( obj.__proto__ );

对象在构造时也设置了`constructor'属性,因此您可以尝试:

obj = ['a','b'];
alert( obj.constructor.prototype );

但是,obj.constructor可以在对象的构造之后更改,就像obj.constructor.prototype一样,而不会更改obj的实际原型指针。

答案 4 :(得分:0)

不是我的一杯茶,但这种定义它的方式会使“obj”成为一个阵列吗? 试图

obj = new Array();
obj[0] = "a";
obj[1] = "b";