0

研究目的で小さな JavaScript ライブラリを構築しようとしています。内部にいくつかの機能を持つプロトタイプ内にオブジェクトがあります。関数内からthis(およびものを持っているもの)にアクセスしたいのですが、今はオブジェクトの親のみを関数にもたらします。valueOfthis

私のコード(コーヒー):

HTMLElement.prototype.on =
  click: (action) -> @valueOf().addEventListener('click', action, false)
                     # I'd like this to work,
                     # but `this` here refers to the `on` object

これは可能ですか?私は車輪の再発明をしていることを知っていますが、私が言ったように、それは研究目的であるため、それがアイデアです.

4

2 に答える 2

1

OPが言及している「これ」について100%確信はありませんが、答えようとします:

まず、コーヒー スクリプト コードを JavaScript にコンパイルしましょう。

HTMLElement.prototype.on =
  click: (action) =>> @valueOf().addEventListener('click', action, false)

HTMLElement.prototype.on = {
  click: function(action) {
    return this.valueOf().addEventListener('click', action, false);
  }
};

わかりました。JavaScript ではthis、関数内の の値は多くの要因によって決定できますが、そのうちの 1 つが MemberExpression です。で関数を呼び出すとa.b()aはオブジェクトでthisあり、関数内でbは にバインドされaます。あなたの場合、おそらくそのような関数を呼び出しています:

element.on.click(...);

問題は、element.onそれ自体がオブジェクトであることです。式は次のように評価されます

(element.on).click(...);

this関数内のの値はではなくclickオブジェクトになります。prototype.onelement

基本的に、そのようにしないでください。thisHTMLElement インスタンスにバインドするのは面倒です。関数をプロトタイプに直接配置します。私が考えることができる唯一の解決策(ひどい、恥ずかしい)は次のとおりです。

element.on.click.bind(element)(...)
于 2013-09-02T21:22:03.527 に答える
0

あなたの問題を正しく理解していれば、解決策は => 演算子です。

http://coffeescript.org/#fat-arrow

于 2013-09-02T13:20:12.727 に答える