[英]init function and the object in Javascript
我有以下(簡化)代碼:
var Foo = (function () {
var data = {},
settings = {
// default settings here
};
function bar(callback) { // bar is an asynchronous function
var result = null;
// fiddle around until you get a result
if (callback) {
callback(result);
}
}
return {
init: function (options, callback) {
var kallback = callback;
$.extend(settings, options);
bar(function () {
if (kallback) {
kallback(WHAT_GOES_HERE);
}
});
},
debug: function () {
return {
settings: settings,
data: data
};
},
set: function (k, v) {
settings[k] = v;
},
get: function (k) {
return settings[k];
}
};
}());
上面的代碼在js文件中,然后在相關頁面的頁腳中:
<script type="text/javascript">
Foo.init({ option1: "value", option2: "value" }, function (obj) {
console.log("The object was ", obj);
});
</script>
基本上,這是我希望能夠做到的:
我認為this
適用於上面的WHAT_GOES_HERE
,但事實證明,至少在我測試它時, this
是DOM Window對象。
首先,我正確構造這個對象嗎? 或者有更好的方法來創建它嗎?
其次,假設我正在做這個,那么什么應該在WHAT_GOES_HERE
以便當console.log("The object was ", foo);
運行, obj
的值是創建的Foo
對象?
是的,在這種方式調用的匿名函數中, 這將引用窗口對象。 要從init方法引用此引用,您必須將引用存儲在另一個變量中:
var kallback = callback, self = this;
$.extend(settings, options);
bar(function () {
if (kallback) {
kallback(self);
}
});
只要您只想擁有一個foo對象,構建對象的方式就可以了。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.