js原型继承题目

var F = function(){};
Object.prototype.a = function(){};
Function.prototype.b = function(){};
var f = new F();
问:能否通过f取到方法a,方法b?

这里我画了一张图:

f是F的实例对象,实例对象继承构造函数原型对象,constructor属性是原型对象特有的,所以,f也具有contructor属性,f.constructor === F.prototype.constructor

而F.prototype.constructor === F。

可以看出f继承F.prototye,而F.prototype则继承Object.prototype,所以f继承了a方法,而取不到b方法;

但是F继承了Function.prototype,又向上继承了Obejct,所以继承a,也继承b;

constructor是每个原型对象拥有的属性,指向构造函数本身,题目中f是F的实例对象,实例对象继承原型对象属性,f.constructor === F.prototype.constructor

所以可以通过f.constructor.a获取a方法,f.constructor.b获取b方法,当然也可以直接f是可以直接调用a方法的。

PS:instanceof就是用来检测当前对象是否在原型链上的关键字

上面:f instanceof F   //true 

console.log('1',f.constructor === F)  //1 true
console.log('2',f.__proto__ === F.prototype)  //2 true
console.log('3',F.prototype.__proto__ === Object.prototype)  //3 true
console.log('4',F.constructor === Function)   //4  true
console.log('5',F.__proto__ === Function.prototype)   //5 true
console.log('6',Function.prototype.__proto__ === Object.prototype)  //6 true
console.log('7',f.a === Object.prototype.a)   //7 true
console.log('8',f.constructor.a === Object.prototype.a)   //8 true
console.log('9',f.constructor.b === Function.prototype.b)   //9 true

  

【完】

应无所住而生其心    ——《金刚经》

 

posted @ 2018-11-05 13:59  tangjiao_Miya  阅读(300)  评论(0编辑  收藏  举报