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

有两种方法。

方法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.vcm,它具有一个属性red

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

在这里,我使用对象文字来创建具有属性的对象red

更多信息:

于 2013-09-23T09:57:38.873 回答