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的代码不起作用的原因。然而,为了提供一个解决方案,也许您可以补充一点,扩展原型是可能的。