使用‘新’关键字作为‘静态’的Javascript函数表达式是正确的吗?

使用‘新’关键字作为‘静态’的Javascript函数表达式是正确的吗?

我只是想更深入地理解Javascript。

我创建了一个“类”gameData我只想要其中之一,不需要构造函数,也不需要实例化。

所以我就这样创造了它.。

var gameData = new function () {

    //May need this later 
    this.init = function () { 
    };

    this.storageAvailable = function () {
        if (typeof (Storage) !== "undefined") {
            return true;
        }
        else {
            return false;
        }
    };}

意识到‘new’关键字不允许实例化它,并使它像静态类一样可用,这将在C#中。

我想对了吗?是静态的?


交互式爱情
浏览 475回答 3
3回答

慕妹3242003

没有班级,等级在ECMAScript中,只有对象.什么时候new用于调用函数,我们称之为构造函数..这个函数完成后会自动返回一个新的对象。存储在该对象中的任何数据this(引用新创建的对象)作为该对象的属性返回。除此之外,new设置一个名为构造器就是这个功能。在您的例子中,您甚至不需要使用new,您可以轻松地重写代码如下:var gameData = (function () {     var public = { },         private = { }; // any private data can get stored here     //May need this later      public.init = function () {      };     public.storageAvailable = function () {         if (typeof (Storage) !== "undefined") {             return true;         }         else {             return false;         }     };     return public;}());这叫做工厂模式, 单例模式, 模块模式可能还有别的名字。

largeQ

我认为您要寻找的只是一个简单的JavaScript对象:var gameData = {     //May need this later      init : function () {      },     storageAvailable : function () {         if (typeof (Storage) !== "undefined") {             return true;         }         else {             return false;         }     }}如果要使用私有变量,请创建一个显示模块模式样式的包装器。这基本上就是Jandy的建议:var gameData = (function() {     var private = 'private variable';     return {         //May need this later          init : function () {          },         storageAvailable : function () {             if (typeof (Storage) !== "undefined") {                 return true;             } else {                 return false;             }         }     }})();
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript