3

重複の可能性:
document.createElementへの直接参照ができないのはなぜですか?

私はJsにまったく慣れておらず、それで遊んでいます。document.getElementById&はかなり長いのでdoucment.createElement、変数に入れることにしました。例えばvar d = document.createElement;

  1. ただし、var someElement = d("p");「TypeError:Illegal invocation」のように呼び出すと、それが何を意味するのかわかりません。

  2. documentオブジェクトを分離してからvar d = document;、そのようなプロパティを指定すると、d.e = d.createElement;それを使用して、機能する要素を作成しますsomeElement = d.e("p")

誰かが1.失敗の原因と2.機能する理由を説明できますか?前もって感謝します。

4

2 に答える 2

0

オブジェクトから呼び出すことができるように、それらを関数でラップする必要がありdocumentます。

var d = function(name) {
    return document.createElement(name);
};

これは単にcreateElementメソッド実装の要件です。document要素を何から作成する必要があるかを知る必要があります。

メソッドをオブジェクトからデタッチすると、メソッドには元のオブジェクトのメモリがありません。

これが機能する理由です:

d.e("p");

ecreateElementメソッドへの参照であり、から呼び出されているためd、はへの参照であるため、次のdocumentように効果的に実行できます。

document.createElement("p");
于 2012-11-03T14:29:53.227 に答える
0

JavaScriptでこの表記を使用する場合:

objectName.methodName(arguments)

thisメソッドは、呼び出しているオブジェクトを(特別な値を介して)通知されます。したがって、あるオブジェクトから別のオブジェクトにメソッドをコピーすると、実際には新しいオブジェクトのメソッドになります。

メソッドを単なる通常の関数として扱い、それをローカル変数にコピーしてから、通常どおりに呼び出す場合は、次のようになります。

localVariableNameHoldingMethod(arguments)

そのthis場合、それはグローバルオブジェクト(window)になります。

于 2012-11-03T14:30:22.623 に答える