在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ 一個原型鏈繼承的筆試題

一個原型鏈繼承的筆試題

function foo(){};
function bar(){
    return{
        method: function(){}
    };
};
foo.prototype = new bar();
console.log(foo.prototype instanceof bar);//false

為什么上面的判斷返回false?
我自己試了一下,如果把bar()里面的return內(nèi)容去掉就返回true,請教一下大神們?yōu)槭裁矗?/p>

function foo(){};
function bar(){};
foo.prototype = new bar();
console.log(foo.prototype instanceof bar);//true
回答
編輯回答
拽很帥

圖片描述

2018年6月8日 13:21
編輯回答
萌吟

構(gòu)造函數(shù)如果有return,那么return內(nèi)容就是構(gòu)造函數(shù)的返回值,所以這里foo.prototype實際上是個bar返回的對象,constructor是Object構(gòu)造函數(shù)而不是bar函數(shù)

2017年8月19日 00:05
編輯回答
誮惜顏

補充一下,樓主要去深入理解一下instanceof 具體是通過什么來判斷,上面的筆試題可以簡化為:

function bar(){
    return{
          method: function(){}
    }
};

console.log( new bar() instanceof bar);
或者
console.log( {method: function(){}} instanceof bar);

instanceof的本質(zhì)是什么呢? a instanceof b 就等價于 myInstanceof( a, b)

 
function myInstanceof( obj , fn ){
    var getPrototypeOf =Object.getPrototypeOf;
    var proto=obj ;
    while(getPrototypeOf && getPrototypeOf(proto)||proto.__proto__){
        if( proto === fn.prototype ){
            return true;
        }
    }
    return false;
}

2018年3月12日 07:19