首頁 >web前端 >js教程 >有關JS輔助函數inherit()的問題_基礎知識

有關JS輔助函數inherit()的問題_基礎知識

WBOY
WBOY原創
2016-05-16 17:38:191042瀏覽

最近在閱讀《JavaScript權威指南》(第六版)在第六章P122有這麼一段程式碼:

複製程式碼 程式碼如下:

// 傳回一個繼承自原型物件proto的屬性的原型物件新物件
// 這裡可以用到ES5的Object.create()函數
function inherit(proto) {
//proto是一個對象,但不能是null
if(proto == null) throw TypeError();
if(Object.create) return Object.create(proto); //如果Object.create()存在,使用它
var t = typeof proto; //否則進一步檢查
if(t!=='object' && t!=='function') throw TypeError();
var F = function() {}; // 定義一個空建構子
F. prototype = proto; // 將其原型屬性設為proto
return new F(); // 使用F()建立proto的繼承物件
}

很明顯輔助函數的用途是建立一個繼承父類別原型的新物件

問題

在關於下面的這句判斷時,一時無法理解

複製程式碼 程式碼如下:

var t = typeof proto; // // 🎜>if(t!=='object' && t!=='function') throw TypeError();

我們的印像中原型物件應該是個Object或直接是字面量,那麼傳遞的參數型別會有「function」型態嗎

理解

函數也是對象,也可以有自己的屬性和方法。等等,這不是我們的靜態屬性和方法啊!這裡是指把函數看成可以加入屬性的物件

複製程式碼 程式碼如下:
// 測試傳遞function類型


// 測試傳遞function類型
var function function() {};
func.text = 'good work';
func.getText = function() {
return func.text;
};
console.log(typeof func); // 'function'
// 傳遞function類型,傳回以func為原型的新物件
var subFunc = inherit(func);
console.log(subFunc.getText()); // 輸出:'good work'

好吧,一個證明說明。原來是可以傳遞'function'類型的

 
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn