2017-05-26 37 views
0

我希望能够做到像下面为数字添加道具ES2015严格模式

console.log(a, typeof a); // prints "3 'number'" 
console.log(typeof a.mymethod()); // prints 'foobar' 

在非严格模式,这是可能的(至少在节点),但在严格的模式ECMAScript 2015禁止在原始值上设置属性(source)。

有什么办法我可以伪造这个,说使用Proxy或属性描述符,或类似的东西?

+1

不能代理原始无论是。任何'Object'静态方法也不会起作用。怀疑这在严格模式下是不可能的。最接近你可能会得到的是[Symbol.toPrimitive](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive)着名的Symbol。你可以做到这一点,强制一个对象的数字将是一个特定的数字,例如'+ {} === 3'。 –

回答

0

下被设置为使用ES2015 /严格的模式,似乎做的伎俩:

'use strict'; 
 

 
var a = 3; 
 
Number.prototype.mymethod = function() { alert("foobar") }; 
 

 
a.mymethod();

+0

这不是我的意思,但它是我问的,所以你会得到答案,虽然修改原型只是一个黑客:-) – oligofren

+0

我知道,我仍然感到肮脏;)非常感谢! – Conan