我认为早上5点人才流失,但我对此有所了解。
obj = ['a','b'];
alert( obj.prototype ); //returns "undefined"
为什么obj.prototype
不返回函数Array(){ }
作为原型?它确实引用Array
作为构造函数。
答案 0 :(得分:7)
因为实例没有原型,所以类*可以。
您可能需要obj.constructor.prototype
或obj.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)
在您的示例中,obj
是Array
的实例,而不是类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";