Javascript 对此的引用不起作用
我有下面一段定义单例的代码:Javascript 对此的引用不起作用,javascript,Javascript,我有下面一段定义单例的代码: var S = (function() { this._enabled = false; this.initialize = function() { this._doit(); }; this._doit = function() { this._enabled = true; }; // Exporting return { Initialize: th
var S = (function() {
this._enabled = false;
this.initialize = function() {
this._doit();
};
this._doit = function() {
this._enabled = true;
};
// Exporting
return {
Initialize: this.initialize
};
})();
我呼吁:
S.Initialize();
得到这个:
“this.\u doit”不是一个函数
如果我只是在初始化中调用\u doit()
,那么就可以了。。。但是我想我确实设置了这个以便在我的类中跨元素使用
我做错了什么?谢谢,因为您在构建时返回了一个包含Initialize的对象,指向此
的Initialize函数,该函数可能是窗口
您要执行以下操作:
var S = (function() {
return {
_enabled : false,
Initialize : function() {
this._doit();
},
_doit : function() {
this._enabled = true;
}
};
})();
S.Initialize();
这是一件非常非常不同的事情
编辑:如果你想保持\u doit()
真正的隐私,你可以改为写:
var S = (function() {
var s = {
_enabled : false,
initialize : function() {
_doit();
},
};
var _doit : function() {
s._enabled = true;
};
return s;
})();
s
成为对象的公共面,函数的闭包成为私有面。因为在构建时,您返回一个包含Initialize的对象,该对象指向此
的Initialize函数,可能是窗口
您要执行以下操作:
var S = (function() {
return {
_enabled : false,
Initialize : function() {
this._doit();
},
_doit : function() {
this._enabled = true;
}
};
})();
S.Initialize();
这是一件非常非常不同的事情
编辑:如果你想保持\u doit()
真正的隐私,你可以改为写:
var S = (function() {
var s = {
_enabled : false,
initialize : function() {
_doit();
},
};
var _doit : function() {
s._enabled = true;
};
return s;
})();
s
成为对象的公共面,函数的闭包成为私有面。内部
this.initialize = function() {
this._doit();
};
此
指的是初始化
对象,因此您要做的是:
this.initialize.\u doit()
,它不存在
尝试将此
上下文保存到局部变量并使用该变量
var S = (function() {
var _this = this;
this._enabled = false;
this.initialize = function() {
_this._doit();
};
this._doit = function() {
_this._enabled = true;
};
// Exporting
return {
Initialize: this.initialize
};
})();
里面
this.initialize = function() {
this._doit();
};
此
指的是初始化
对象,因此您要做的是:
this.initialize.\u doit()
,它不存在
尝试将此
上下文保存到局部变量并使用该变量
var S = (function() {
var _this = this;
this._enabled = false;
this.initialize = function() {
_this._doit();
};
this._doit = function() {
_this._enabled = true;
};
// Exporting
return {
Initialize: this.initialize
};
})();
对于您在这里所做的事情,我将完全避免使用此
,例如:
var S = (function() {
var _enabled = false;
function initialize() {
_doit();
};
function _doit() {
_enabled = true;
};
// Exporting
return {
Initialize: initialize
};
})();
因为您没有使用new
关键字,this
指的是窗口
对象(或者在严格模式下,它指的是未定义的
)。另一种选择是使用新函数()
,例如:
var S = new function() {
this._enabled = false;
this.initialize = function() {
this._doit();
};
this._doit = function() {
this._enabled = true;
};
};
S.initialize();
对于您在这里所做的事情,我将完全避免使用此
,例如:
var S = (function() {
var _enabled = false;
function initialize() {
_doit();
};
function _doit() {
_enabled = true;
};
// Exporting
return {
Initialize: initialize
};
})();
因为您没有使用new
关键字,this
指的是窗口
对象(或者在严格模式下,它指的是未定义的
)。另一种选择是使用新函数()
,例如:
var S = new function() {
this._enabled = false;
this.initialize = function() {
this._doit();
};
this._doit = function() {
this._enabled = true;
};
};
S.initialize();
将此
别名为\u此
在此处没有帮助,因为此
指的是窗口
。为了使这个
正确工作,您需要使用新的
关键字,或者将所有内容放入对象文本中,如@Malvolio的回答所示。否则,您将在窗口
对象上设置全局属性!将此
别名为\u此
在此处没有帮助,因为此
指的是窗口
。为了使这个
正确工作,您需要使用新的
关键字,或者将所有内容放入对象文本中,如@Malvolio的回答所示。否则,您将在窗口
对象上设置全局属性!如果我想让\u doit
私有怎么办?如果我想让\u doit
私有怎么办?好吧,如果我想让\u doit
私有怎么办?在我的第一个示例中,除了“Initialize”方法之外的所有方法都是私有的。好吧,如果我想让\u doit
私有怎么办?在我的第一个示例中,除“Initialize”方法外的所有方法都是私有的。