Number.somepropertyormethod和Number()之间有什么区别somepropertyormethod?
问题描述:
所以下面的工作:Number.somepropertyormethod和Number()之间有什么区别somepropertyormethod?
alert(Number().toString.call(1));
但是,这并不工作:
alert(Number.toString.call(1));
此外,以下几项工作:
alert(Number.prototype.constructor(1));
但是,这并不工作:
alert(Number().prototype.constructor(1));
为什么我们需要第一个例子中的Number后面的括号,为什么我们必须省略第二个例子中的括号?
答
Number
是一个构造对象。作为一个函数调用,它允许您创建新的数字实例。返回号码0
。数字实例具有各种属性和方法,其中包括toString()
和toExponential()
(例如)。语法的下面两个比特具有相同的含义:
Number().toString.call(1);
(0).toString.call(1);
的Number
对象也有其自身的性质。一个特殊的属性是prototype
属性。这基本上是新数字实例的模板。在Number.prototype
上存在的所有属性也存在于数字实例上。因此,我们可以相同的代码第三位添加到上述两个:
Number.prototype.toString.call(1);
Number实例,但是,没有prototype
属性,所以你不能访问Number().prototype
。另一方面,它们具有constructor
属性,该属性返回创建它们的对象,即Number对象。您可以在此访问prototype
。因此,我们的代码相同的第四位:
Number().constructor.prototype.toString.call(1);
希望这澄清了Number
对象的数目和实例之间的关系。作为最后一个音符,所有上面的代码位是相同的这一点,显然是正确的方式来做到这一点:
(1).toString();
答
我相信你的例子Number是一个类,Number()是一个构造函数调用,它返回Number类的一个实例。
答
你可以试着检查下列各项:
这是正常的,他们有不同的行为,他们的意思是不同的东西
答
这里有一些提示,你似乎很迷茫
- 的构造函数(数字)没有名为toString的属性。它确实有一个名为原型的属性,如果属性未在对象本身中定义,则允许实例查看该对象。
- Number()返回一个实例,该实例具有通过原型链(从Number.prototype.toString)调用toString的属性。这些实例没有prototype属性
// So the following works, you're calling the toString Method of Number.prototype
// and passing 1 as its context
alert(Number().toString.call(1));
// But this does not work:
// Number (the constructor) does not have property called toString, FAIL
alert(Number.toString.call(1));