有關(guān)于JS輔助函數(shù)inherit()的問(wèn)題
最近在閱讀《JavaScript權(quán)威指南》(第六版)在第六章P122有這么一段代碼:
// 返回一個(gè)繼承自原型對(duì)象proto的屬性的新對(duì)象
// 這里可以用到ES5的Object.create()函數(shù)
function inherit(proto) {
//proto是一個(gè)對(duì)象,但不能是null
if(proto == null) throw TypeError();
if(Object.create) return Object.create(proto); //如果Object.create()存在,使用它
var t = typeof proto; //否則進(jìn)一步檢查
if(t!=='object' && t!=='function') throw TypeError();
var F = function() {}; // 定義一個(gè)空構(gòu)造函數(shù)
F.prototype = proto; // 將其原型屬性設(shè)置為proto
return new F(); // 使用F()創(chuàng)建proto的繼承對(duì)象
}
很明顯輔助函數(shù)的用途是創(chuàng)建一個(gè)繼承父類原型的新對(duì)象
問(wèn)題
在關(guān)于下面的這句判斷時(shí),一時(shí)無(wú)法理解
var t = typeof proto; //否則進(jìn)一步檢查
if(t!=='object' && t!=='function') throw TypeError();
我們的印象中原型對(duì)象應(yīng)該是個(gè)Object或者直接是字面量,那么傳遞的參數(shù)類型會(huì)有“function”類型情況嗎
理解
函數(shù)也是對(duì)象,也可以有自己的屬性和方法。等等,這不是我們的靜態(tài)屬性和方法??!這里是指把函數(shù)看成可以添加屬性的對(duì)象
// 測(cè)試傳遞function類型
var func = function() {};
func.text = 'good work';
func.getText = function() {
return func.text;
};
console.log(typeof func); // 'function'
// 傳遞function類型,返回以func為原型的新對(duì)象
var subFunc = inherit(func);
console.log(subFunc.getText()); // 輸出:'good work'
好吧,一個(gè)證明說(shuō)明。原來(lái)是可以傳遞'function'類型的
相關(guān)文章
JavaScript中的Navigator瀏覽器對(duì)象
2008-01-01
介紹一個(gè)簡(jiǎn)單的JavaScript類框架
這篇文章主要介紹了一個(gè)簡(jiǎn)單的JavaScript類框架,有助于初學(xué)者理解JS類的創(chuàng)建與繼承,需要的朋友可以參考下2015-06-06
JavaScript學(xué)習(xí)筆記整理_關(guān)于表達(dá)式和語(yǔ)句
下面小編就為大家?guī)?lái)一篇JavaScript學(xué)習(xí)筆記整理_關(guān)于表達(dá)式和語(yǔ)句。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-09-09
JavaScript中日期的相關(guān)操作方法總結(jié)
這篇文章主要介紹了JavaScript中日期的相關(guān)操作方法總結(jié),是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-10-10
簡(jiǎn)介JavaScript中charAt()方法的使用
這篇文章主要介紹了JavaScript中charAt()方法的使用詳解,是JS入門學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-06-06

