Javascript 重新分配内置类型的原型
在这里,我为默认的Javascript 重新分配内置类型的原型,javascript,oop,object,prototype,Javascript,Oop,Object,Prototype,在这里,我为默认的Number构造函数创建了一个新的原型。 然后创建一个新的Number实例并存储在obj中。 由于我在原型分配之后创建了一个实例,我希望obj.min将返回10,但它返回undefined 我假设,因为新创建的Number.prototype的构造函数属性指向相同的Number构造函数,所以实例obj的[prototype]属性指向新创建的原型 我认为问题在于假设,obj的[PROTOTYPE]属性指向原始默认原型。ECMAScript定义的核心类型的原型属性(对象,数字,布尔
Number
构造函数创建了一个新的原型。
然后创建一个新的Number
实例并存储在obj
中。
由于我在原型分配之后创建了一个实例,我希望obj.min
将返回10
,但它返回undefined
我假设,因为新创建的Number.prototype
的构造函数属性指向相同的Number
构造函数,所以实例obj
的[prototype]
属性指向新创建的原型
我认为问题在于假设,
obj
的[PROTOTYPE]
属性指向原始默认原型。ECMAScript定义的核心类型的原型属性(对象
,数字
,布尔
,数组
,字符串
,函数
,错误
,RegExp
)是只读的,您不能用自己的替换它
但你可以扩展它:
Number.prototype=
{
constructor:Number
min:10,
max:15
};
var obj=new Number();
alert(obj.min);
ECMAScript(
对象
,数字
,布尔
,数组
,字符串
,函数
,错误
,正则表达式
)定义的核心类型的原型属性是只读的,您不能用自己的属性替换它
但你可以扩展它:
Number.prototype=
{
constructor:Number
min:10,
max:15
};
var obj=new Number();
alert(obj.min);
您忘记了在“Number”(数字)后面加逗号,根据规范,
Number。prototype
是只读的:@安德烈:这篇文章一定是打字错误,否则,警报将永远不会执行。你忘了在“Number”后面加逗号了根据规范,Number.prototype
为只读:@安德烈:必须是文章中的打字错误,否则,警报将永远不会执行。@chetanmehta:Chrome上不正确。它们可以扩展-但是,浏览器定义的函数不能被替换。@SébastienRenauld您不能替换函数中的原型。因为我在对象中没有发现任何神秘的道具。getOwnPropertyNames@chetanmehta:只有一个设置使属性为只读。这就是可写
设置,规范明确定义的原型
为可写:false
。要查看它,请使用Object.getOwnPropertyDescriptor(Number,“prototype”)
。我不知道为什么会被否决,因为这至少解释了OP的代码不起作用的原因。然而,为了提供一个解决方案,也许你可以补充一点,扩展原型是可能的。@chetanmehta:Chrome上不正确。它们可以扩展-但是,浏览器定义的函数不能被替换。@SébastienRenauld您不能替换函数中的原型。因为我在对象中没有发现任何神秘的道具。getOwnPropertyNames@chetanmehta:只有一个设置使属性为只读。这就是可写
设置,规范明确定义的原型
为可写:false
。要查看它,请使用Object.getOwnPropertyDescriptor(Number,“prototype”)
。我不知道为什么会被否决,因为这至少解释了OP的代码不起作用的原因。然而,为了提供一个解决方案,也许您可以补充一点,扩展原型是可能的。