2017-05-26 14 views
0

を小道具を追加します。私は、これは(少なくともノードで)可能である非厳密モードでは、次のはES2015 strictモードで数値に

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

ような何かを行うことができるようにしたいが、strictモードたいですECMAScript 2015ではプリミティブ値のプロパティを設定できません(source)。

Proxyやプロパティデスクリプタなどを使って、これを偽造する方法はありますか?

+1

いずれかの原始的なプロキシすることはできません。また、 'Object'静的メソッドのどれも動作しません。これはstrictモードでは不可能です。おそらくあなたが得ることができる最も近いのは[Symbol.toPrimitive](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Symbol/toPrimitive)のよく知られたシンボルです。オブジェクトを数値に強制すると、特定の数値になるようにすることができます。 '+ {} === 3'です。 –

答えて

0

は、次はES2015/strictモードを使用するように設定し、トリックを行うために表示されます:

'use strict'; 
 

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

 
a.mymethod();

+0

それは私が意味したものではありませんが、私が尋ねたものですから、プロトタイプを変更することは何一つハックです:-) – oligofren

+0

私はまだ汚いと感じています;)多くのありがとう! – Conan

関連する問題