JavaScript中訪問原型鏈上函數(shù)參數(shù)的技巧
在javascript開發(fā)中,常常需要處理原型鏈上的函數(shù)及其參數(shù)。本文探討如何在構(gòu)造函數(shù)中間接訪問原型鏈上方法的參數(shù)。直接訪問是不可能的,因為原型方法在構(gòu)造函數(shù)執(zhí)行后才被調(diào)用,兩者執(zhí)行時機不同。
考慮以下代碼結(jié)構(gòu):
function abc(k) { this.val = k + this.q; // this.q 未定義,此處可能有錯誤 } abc.prototype.add = function(q) { return this.val + q; // 使用 this.val 和參數(shù) q };
在abc構(gòu)造函數(shù)中,無法直接獲取add方法的參數(shù)q。 q只在add方法的內(nèi)部作用域中可用。
為了在abc構(gòu)造函數(shù)中間接訪問add方法的參數(shù),我們可以使用一個屬性來存儲該參數(shù)。 以下是一個改進的實現(xiàn):
立即學(xué)習(xí)“Java免費學(xué)習(xí)筆記(深入)”;
function Abc(k) { this.val = k; // 修正:避免 this.q 未定義的錯誤 this.addParams = {}; // 用于存儲 add 方法的參數(shù) } Abc.prototype.add = function(q) { this.addParams = q; // 將參數(shù) q 存儲到 addParams 屬性 return this.val + q; }; var x = new Abc(1); x.add(2); console.log(x.addParams); // { name: 2 } // 此處輸出應(yīng)為 2,而非對象
在這個例子中,我們創(chuàng)建了一個addParams屬性,在add方法中將參數(shù)q賦值給它。這樣,Abc的實例x在調(diào)用add方法后,就可以通過x.addParams訪問傳遞給add方法的參數(shù)了。 需要注意的是,原示例中console.log(x.params)輸出的是一個對象,這與代碼邏輯不符,此處已修正。 如果add方法的參數(shù)是對象,則addParams屬性會存儲該對象。
通過這種方式,我們巧妙地實現(xiàn)了在構(gòu)造函數(shù)中間接訪問原型鏈上方法參數(shù)的目的,避免了直接訪問的限制,并實現(xiàn)了參數(shù)在不同方法間的傳遞和訪問。
? 版權(quán)聲明
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載。
THE END