Javascript 要将原型分配给数字,我应该使用Function.prototype还是Object.prototype?
我想用一个新函数扩展“Number”类型,因此我必须定义一个原型。当我想到这一点时,我会有一大堆问题:Javascript 要将原型分配给数字,我应该使用Function.prototype还是Object.prototype?,javascript,Javascript,我想用一个新函数扩展“Number”类型,因此我必须定义一个原型。当我想到这一点时,我会有一大堆问题: 数字是否同时从Object.prototype和Function.prototype继承 “数字”是“对象”还是“函数” 什么时候我应该定义一个对象作为数字的原型?这有意义吗 Number本身是一个普通函数。 可以直接为其指定属性 如果要扩展number实例,应将number方法指定给number.prototypenumber中已经包含了number方法。prototype要添加自己的方法,
Number
本身是一个普通函数。可以直接为其指定属性
如果要扩展number实例,应将number方法指定给
number.prototype
number中已经包含了number方法。prototype要添加自己的方法,只需执行以下操作:
Number.prototype.addOne = function(){
return this.valueOf() + 1;
};
1..addOne() // 2
你的问题让我困惑,因为我不确定你所说的数字是指数字构造函数,它只是一个普通函数还是数字原语
当执行
1..addOne()
操作时,数字原语不是对象,因此不会继承任何内容。数字将转换为对象,然后在Number.prototype
中找到.addOne
,并使用设置为数字对象形式的this
调用 我不明白你的问题。如果我真的认为猴子补丁Number
是个好主意,我会:
Number.prototype.newfunc = function(...) { ... }
1-对
Number instanceof Object
也返回trueFunction instanceof Object
返回true。所以Number拥有对象和函数拥有的所有方法
2-数字是一个函数<代码>数字类型返回“函数”
3-如果你想给Number的原型添加一个方法,只需使用
Number.prototype.METHOD_NAME = function() {
// your logic
}
Number.prototype.METHOD_NAME=函数(){
//你的逻辑
}
然后可以对所有数字调用方法,如
1..method\u NAME()
数字、函数和对象都是通用构造函数。数字继承自函数,而函数又继承自对象。数字构造函数应用于数字原语,以创建包装器对象并调用相关函数。1。不,2。不,3。数字已经有了一个原型,4。我猜数字是一个内置的普通函数。以“Number”作为原型的其他功能有哪些?“数字文字”的原型是什么?嗯?我不知道你在问什么。让我再试一次。如果我执行Number.prototype.addOne=函数(n){返回这个.valueOf()+1;},我想1.addOne()是有效的,而“1.addOne()是无效的。对吗?如果上述理解是正确的,我的问题是,一种类型如何继承addOne,而另一种则不正确“1”
是一个字符串1。addOne()
是一个语法错误,因为点是小数点而不是属性访问。解决方法:1..addOne()
1.addOne()
(1).addOne()
Esailija:你的答案部分回答了我的问题。将为对象或对象子集找到“.addOne”(我猜是“1”。.addOne()将不起作用)。如果是对象的子集,我的问题是Number.prototype如何映射到该子集。它将仅在Number对象上找到。而1..addOne()//2
起作用,这就是为什么我的答案中会出现这种情况1.addOne()
是一个语法错误,因为点是小数点而不是属性。为了完成回答,它只适用于数字原语,因为这是一个为数字原语创建包装类的通用构造函数。对于对象、字符串、数组等,有三种是特定的通用构造,即对象、字符串、,Array@RajkumarMasaniayan你是什么意思?我只谈了代码和我的答案。如果您有一些代码符合您所描述的,请将其编辑到您的问题中:PIt对于理解彼此是如此具有挑战性,不是吗?:-)。当我问最初的问题时,我没有意识到不同类型的物体。因此,我回答了我自己关于addOne如何识别函数对象的问题(在本例中是为1创建的包装器类)。我是说“1”继承自String.prototype,而不是Number.prototype,因此“Esailija说的是真的”。如果我仍然不清楚,我就放弃。