0

Javascript で関数の外部から内部関数にアクセスしようとしていますが、関数のソース コードを出力する代わりに「未定義」としか出力されません。changeBlahのスコープ外から関数のプロトタイプを変更するにはどうすればよいexampleFunctionですか?

var blah = "";
function exampleFunction(theParameter){
   this.blah = theParameter;
    this.changeBlah = function(){
        this.blah += "gah";
    }
}

var stuff2 = new exampleFunction("Heh!");
alert(stuff2.blah);
stuff2.changeBlah();
alert(stuff2.blah);

alert(exampleFunction.changeBlah); //now why doesn't this work? It doesn't print the function's source code, but instead prints undefined.​​​​​​​​​​​​​​​​​​​​​​​
4

3 に答える 3

1

最も近いのは、Prototype モデルを使用することです。

function exampleFunction(theParameter) {this.blah = theParameter;}
exampleFunction.prototype.changeBlah = function() {this.blah += "gah";}

alert(exampleFunction.prototype.changeBlah);
于 2012-10-02T01:42:06.317 に答える
0

これは私がこれまでに考案した最良の解決策です (そしてかなり簡潔です):

exampleFunction.prototype.changeBlah = function(){
    this.blah += "gah"; //"this" refers to an instance of changeBlah, apparently 
}

var blah = "";
function exampleFunction(theParameter){
   this.blah = theParameter;
}

var stuff2 = new exampleFunction("Heh!");
alert(stuff2.blah);
stuff2.changeBlah(); //it works, even though the "prototype" keyword isn't specifically used here
alert(stuff2.blah);
alert(exampleFunction.prototype.changeBlah);​
于 2012-10-02T03:15:05.117 に答える
0

.. [exampleFunction.changeBlah] が機能しないのはなぜですか?

this ではなかっ たからexampleFunctionです。

それは[[プロトタイプ]]として持っていた新しいオブジェクトでした。exampleFunctionプロパティへの割り当ては、[[prototype]] 解決チェーンに反映されません。(オブジェクトからオブジェクトの [[prototype]] に直接アクセスする方法はありませんが、[[prototype]] オブジェクトがわかっている場合は変更できます )

と比較してください(これは壊れますstuff2.blahが、期待どおりに動作するはずですexampleFunction.changeBlah):

exampleFunction.changeBlah = function(){
    this.blah += "gah";
}

(別の可能なアクセス方法については、xdazz のコメントも参照してください。)

于 2012-10-02T01:41:29.600 に答える