2
我想了解在javascript中創建對象和方法的不同方法。我讀過很多文章,博客和stackoverflow的問題,我想我總體上理解了這個概念。但是我遇到了一個小型的JavaScript庫(用coffeescript編寫),它創建對象和方法的方式讓我感到困惑。試圖瞭解在javascript中創建對象和方法
我已經包含一個片段,但如果你想要的話,你可以在instafeed.js找到完整的腳本。
代碼:
(function() {
var Instafeed, root;
Instafeed = (function() {
function Instafeed(params) {
var option, value;
this.options = {
target: 'instafeed',
get: 'popular',
resolution: 'thumbnail',
sortBy: 'most-recent',
links: true,
limit: 15,
mock: false
};
if (typeof params === 'object') {
for (option in params) {
value = params[option];
this.options[option] = value;
}
}
}
Instafeed.prototype.run = function() {
var header, instanceName, script;
if (typeof this.options.clientId !== 'string') {
if (typeof this.options.accessToken !== 'string') {
throw new Error("Missing clientId or accessToken.");
}
}
if (typeof this.options.accessToken !== 'string') {
if (typeof this.options.clientId !== 'string') {
throw new Error("Missing clientId or accessToken.");
}
}
if ((this.options.before != null) && typeof this.options.before === 'function') {
this.options.before.call(this);
}
if (typeof document !== "undefined" && document !== null) {
script = document.createElement('script');
script.id = 'instafeed-fetcher';
script.src = this._buildUrl();
header = document.getElementsByTagName('head');
header[0].appendChild(script);
instanceName = "instafeedCache" + this.unique;
window[instanceName] = new Instafeed(this.options);
window[instanceName].unique = this.unique;
}
return true;
}
...
return Instafeed;
})();
root = typeof exports !== "undefined" && exports !== null ? exports : window;
root.Instafeed = Instafeed;
}).call(this);
我有理解困難以下幾點:
爲什麼筆者喜歡用
(function(){...}).call(this);
包裹的一切嗎?也許爲了避免創建全局變量?腳本最後端的
.call(this)
部分有什麼用途?爲什麼作者創建了
root
變量,以下是哪些內容?root = typeof exports !== "undefined" && exports !== null ? exports : window; root.Instafeed = Instafeed;
由於這個首選的方法在CoffeeScript中創建對象和方法,我想這是的更好的方法來做到這一點的。但它的優點在接下來的版本逃脫我:
function Instafeed(params) {
...
}
Instafeed.prototype.run = function() {
...
}
感謝您的快速響應裏面的全局對象。你對最後一部分有什麼意見嗎? (優於常見的方式...) – monroo
@monroo:其中的差異的優勢? – SLaks