實現以下(不起作用)的最佳設計模式是什麼?Javascript:調用該對象中的對象方法
var obj = (function() {
// code defining private variables and methods
var _obj = {
property: value,
method1: function() {
// do stuff
},
method2: function() {
// use property
var prop = _obj.property; // obviously doesn't work
// call method1
obj.method1(); // "obj" not finished being defined yet!
}
};
// obviously now I could do...
var prop = _obj.property;
return _obj;
})();
// and I could now do...
obj.method1();
,我認爲應該工作是
var obj = (function() {
var property = value,
method1 = function() {
// do stuff
},
method2 = function() {
// use property
var prop = property;
// call method1
method1();
},
_obj = {
property: property,
method1: method1,
method2: method2
};
return _obj;
})();
同樣的變化,它是如何工作的對象意味着用new
運營商創造出來的?在構造函數本身中,你可以編寫。但是如果你想保持構造器很小,只定義那些可能在創建時定製的東西,然後在原型中定義其餘部分呢? (這似乎是常見的模式。)原型中的屬性/方法可以以任何方式進行交互?
var MyObj = function(name) {
this.name = name;
};
var obj = new MyObj('Bob');
MyObj.prototype = {
called_often: function() {
// lots more code than just the following
return document.getElementById('someID').value;
},
global_default: 'value', // can be changed, so need to pull value when run
does_stuff: function(value) {
var str = global_default + value, // can't access global_default on its own
input = MyObj.called_often(), // doesn't work; MyObj.prototype.called_often() DOES
name = this.name; // 'this' used in the prototype doesn't work
// even within a created object
return name + input + str;
}
};
我敢肯定有更好的方法來實現我的結果,每當我遇到這個問題。此代碼不是特定情況,只是說明了一般問題。所以你將無法爲我遇到的特定情況提供替代方案。但也許你可以幫助我全面思考。
我以爲'this'只是指向對象,如果它是用new +構造函數創建的,或者如果您使用call/apply。但你是對的,它的工作原理!顯然,我一直在困惑。另外,我原以爲我試過了。但顯然不是。 –
在同一時間,JavaScript非常簡單並且非常複雜:-)事實證明,當某個函數被調用時,this被綁定,那就是這個;然而,這條簡單的規則導致了各種有趣的細節。 – Pointy
嗨,波蒂。我有同樣類型的問題。我正在使用'roundslider.js',並且我正在調用一個函數,在這裏你寫了一些東西。但對我來說這是錯誤的。 $(「#slider」)。roundSlider({function(event){ traceEvent() },' }); – locateganesh