我對JavaScript非常陌生,使用我的對象的原型時,我嘗試調用當前對象來擴展一個方法,但它不起作用。所以我google'd我的問題,但沒有真正得到任何地方,因爲它幾乎是不可能的短語。然而,我發現this
關鍵字,我認爲應該工作,但沒有。下面是我有:JavaScript - 使用對象原型來擴展方法的用法?
(function(window, document, undefined) {
var myObj = function () { }; // not a noop
var ua = function() { return navigator.userAgent.toLowerCase(); }
function noop() { }; // empty noop function
myObj.prototype = {
constructor: myObj,
renderizr: {
presto: ua().match(/(opera|presto)/i),
trident: ua().match(/trident/i), // don't parse "msie" as opera uses this sometimes
webkit: ua().match(/(chrome|safari|webkit)/i),
gecko: ua().match(/(firefox|gecko)/i), // don't parse "netscape" as a lot of strings use this
val: '' // keep empty for now
}
};
// renderizr.val extension
// use this so the user can print the value of
// the rendering engine instead of using multiple
// conditional statements.
if(this.renderizr.presto) { this.renderizr.val = "Presto" }
else if(this.renderizr.trident) { this.renderizr.val = "Trident") }
else if(this.renderizr.webkit) { this.renderizr.val = "Webkit") }
else if(this.renderizr.gecko) { this.renderizr.val = "Gecko") }
window.myObj = new myObj();
}(window, document));
這樣一來,你可以做alert(myObj.renderizr.val);
而不是做單調的條件語句。
我不想做通用瀏覽器名稱檢測,因爲您只應該測試您需要的功能,而不是瀏覽器。但是,某些渲染引擎對渲染網頁有不同的習慣,所以我確實希望在腳本中包含引擎檢測。 (但是,我不建議使用這個,就像我說的,我只是想了解JavaScript以及它是如何工作的,而且它不工作!)。
所以我的問題是,我在這裏做錯了什麼,我該如何解決它?爲什麼this
關鍵字不起作用?
閱讀https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Operators/這個 – Bergi 2013-02-12 23:49:18
你可以通過使用'myObj.prototype.renderizr'來訪問它 – Bergi 2013-02-13 00:03:00