2

ウィンドウオブジェクトで定義された関数を外部から呼び出そうとしていますが、エラーがスローされます。

    window.vcm = (function() {
    "use strict";
     function red(){
      alert('red');
     }   
   });  
  vcm.red();//Error at this line...

私はJavaScriptでOOPSを初めて使用します。ここでこの関数を呼び出す方法を教えてください。

4

3 に答える 3

2

値にはプロパティがvcmありません。red

おそらく、代わりにこれを意味します。は、呼び出すことができる関数でvcmあるプロパティを持つオブジェクトです。red

window.vcm = {
  red: function(){
    "use strict";
    alert('red');
  }   
};

vcmまた、それ自体が関数でありred、関数であるプロパティを持つ可能性もあります (実際には多少ではありませんが) 。

window.vcm = (function() {
  "use strict";
   var vcm = function() { alert("vcm"); }
   vcm.red = function() { alert('vcm.red'); };
   return vcm;
 })();

vcm();     // "vcm"
vcm.red(); // "vcm.red"
于 2013-09-23T09:58:12.387 に答える
1

2 つのアプローチがあります。

アプローチ 1 : window.vcm = { red: function (){ "use strict"; alert('red'); } }; vcm.red();

アプローチ 2 :

window.vcm = (function() {
    "use strict";
   this.red = function(){
      alert('red');
    }   
});
var x = new vcm();
x.red(); 
于 2013-09-23T10:07:49.160 に答える
0

red割り当てた関数内にのみ存在しwindow.vcm、関数が実行されたときにのみ存在します。さらに、関数にはプロパティがありませんred

次の簡単な例を考えてみましょう。

function foo() {
    function bar() {}
}

bar(); // will throw an error

は呼び出されたスコープで定義されていないため、呼び出すbarとエラーがスローされます。bar

プロパティを持つ にオブジェクトを割り当てたいようです:window.vcmred

window.vcm =  {
    red: function (){
        "use strict";
        alert('red');
    }
};

ここでは、オブジェクト リテラルを使用して、プロパティを持つオブジェクトを作成していますred

詳しくは:

于 2013-09-23T09:57:38.873 に答える