var F = function(){};
Object.prototype.a = function(){ console.log('a'); };
Function.prototype.b = function(){ console.log('b'); };
var f = new F();
f.a();// a
f.b();// undefined
F.a();// a
F.b();// b
为什么f继承不了b方法?
Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
大概原型是这样的
所以说f是取不到b的。
然后看F:
所以就能有a 还有b
可以参考 www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html
F 只是构造函数,
new F并不是说 f 是函数 F 的实例,而是说通过构造函数 F 生成新的对象。b方法是在Function类型上的原型上定义的,只有函数才会继承它,而通过new F()构造出来的实例f,是一个新对象,所以继承不了b
如果想让f继承b,应该在F.prototype上定义b
如果就这题而言,f.b()得到undefined的原因是:
话有点长,也可以换个角度想:
可以来试验一下:
本题还说到"Object" ,咱们也来比较下 :
可以看出f的
构造函数F其实是"继承"自Object(JavaScript中没有继承,只是实现这种模式)。总结:
- 构造函数在创建之初就自动生成了个指向
原型对象的指针,指向它的"父类",F能访问到a和b都是你在父类的原型对象上操作添加后的结果。- 实例能访问到它的构造函数的
原型对象上的属性或方法 和原型对象的原型对象的属性或方法 和原型对象。。。(此处省略N个字)。(原型链)