我从书籍《Javascript精粹》中选取了以下示例,在Firefox浏览器中运行:
这是我对其工作原理的理解。我们使用 () 高优先级运算符来评估 -10/3,得到这个 64 位浮点值 -3.3... 由于 JavaScript 没有 Float、Decimal 或 Integer 类型,返回值为 Number。因此,我们在 Number 对象上调用 integer() 函数,它位于其原型链中。"this" 必须引用 Number 对象所持有的值。我们使用三元运算符来检查它是否为负数或正数,在这种情况下,我们运行:Math'ceil',因为它是负数。这将向上舍入该数字以产生 -3。
此脚本将起作用,但我不明白为什么 Number.method 不会抛出异常,因为 Number 不是 Function 的一种类型,而 method 是定义在 Function 的原型上的,而不是 Number 的原型上,Number 也没有从 Function 继承,它仅继承自 Object.prototype。
Function.prototype.method = function(name, value){
this.prototype[name] = value;
return this;
}
Number.method('integer', function ( ) {
return Math[this < 0 ? 'ceil' : 'floor'](this);
});
console.log((-10 / 3).integer());
这是我对其工作原理的理解。我们使用 () 高优先级运算符来评估 -10/3,得到这个 64 位浮点值 -3.3... 由于 JavaScript 没有 Float、Decimal 或 Integer 类型,返回值为 Number。因此,我们在 Number 对象上调用 integer() 函数,它位于其原型链中。"this" 必须引用 Number 对象所持有的值。我们使用三元运算符来检查它是否为负数或正数,在这种情况下,我们运行:Math'ceil',因为它是负数。这将向上舍入该数字以产生 -3。
此脚本将起作用,但我不明白为什么 Number.method 不会抛出异常,因为 Number 不是 Function 的一种类型,而 method 是定义在 Function 的原型上的,而不是 Number 的原型上,Number 也没有从 Function 继承,它仅继承自 Object.prototype。
Number instanceof Function === true
- Patrick Evans