一段時間以來,我一直在使用objectOne的設計模式,如下所示。我不記得我在哪裏拿起它。我試圖找到它,但不能。也許是我讀到的一些混合物。今天我發現它很有缺陷,因爲this
正在解析窗口對象,使所有公共方法成爲全局。我的印象是,當在一個函數中使用this
時,它會引用函數本身,而不是全局窗口對象。我想這不是這種情況?有人可以解釋一些我錯過的東西,或者指出一個解釋它的資源嗎?我也對修復這個模式感興趣,或者找到一個與全局方法名不存在這個問題的類似的模式。我想如果我會使用this
以外的變量,也許fn
,並且我返回那個,那麼它會修復一些事情。提前感謝您對這個問題的任何幫助,對不起它的模糊。瞭解Javascript中的功能範圍,`this`和OO設計模式
JS小提琴: http://jsfiddle.net/nLL8y/3/
myapp = {};
myapp.objectOne = function() {
var that = this,
p = {};
this.public = function() {
console.log(this);
};
p.private = function() {};
return this;
}();
myapp.objectTwo = {
public: function() {
console.log(this);
},
notPrivate: function() {}
};
myapp.objectThree = function() {
var fn = {},
p = {};
fn.public = function() {
console.log(this);
};
p.private = function() {};
return fn;
}();
//creates global functions
myapp.objectOne.public();
//doesn't allow private
myapp.objectTwo.public();
//seems to work
myapp.objectThree.public();
這是指最接近的綁定對象實例,在這種情況下,這將是窗口。你的代碼應該做什麼? –
https://developer.mozilla.org/en/JavaScript/Reference/Operators/這個 –
'this'從來沒有指向函數本身,除非你明確*設置它:'func.call(func)'。 –