如果我们添加了一个方法,以数函数(或布尔或字符串)这样为什么一个原始变量就像一个对象?
Number.prototype.sayMyNumber = function(){
return "My number is " + this;
}
,然后创建若干对象将其分配给一个变量
var num1 = new Number(34);
num1.sayMyNumber(); // it says "My number is 34"
这是精细和预期,因为我们创建'Number'对象。
同样,如果我要创建一个原始变量
num2 = 34;
num2.sayMyNumber(); // it says "My number is 34"
出人意料的是,NUM2也有一个方法sayMyNumber(),即使我们没有明确创建一个Number对象。
然后我试图像这样,
34.sayMyNumber(); // error, this does not work
为什么NUM2工作?
更新
这是一个后续问题,我问在注释部分,我把它这里更好的可视性
下面的答案提到NUM2被认为是一个“数'内部对象。这使我更加困惑。
typeof num1 === "number" // returns false
typeof num2 === "number" // returns true
typeof num1 === "object" // returns true
typeof num2 === "object" // returns false
这不是说num2不是“对象”吗? 如果它不是一个“对象”,那么这怎么会是“数字”的实例?
在'34.sayMyNumber()'点被视为导致错误的**小数点**。如果你想在这种情况下强制方法调用,你必须使用parens。 'num2'工作原因导致JS中的任何数字都是'Number'实例,即使它被定义为文字 – hindmost
甚至当我像这样写'(2).sayMyNumber()'时它也不起作用。不知道这是否与上面 –
一样诚实(whatever_number).yourFunction()的作品 –