构造函数的原型
(1)构造函数首先是函数,所有的函数都是Function()构造函数的实例,因此它有__proto__属性指向Function.prototype。Function.prototype指向的是一个对象,这个对象包含length属性、call方法、apply方法以及其他的方法和属性,其详细介绍参见这里。因此所有的函数(或方法)都可以调length、call、apply
(2)所有的函数本身拥有prototype属性,它指向Object。
var F = function() {}; Object.prototype.a = function() { console.log('a'); }; Function.prototype.b = function() { console.log('b'); } var f = new F(); f.a(); f.b(); F.a(); F.b();
在上述代码中f.b()会报错f.b is not a function。因为在F内部并没有定义b方法。在F.prototype,也就是Object中也没有b方法。Object.prototype没有b方法。因此f.b()就没定义
而F.b()不会报错,在F内部并没有定义b方法,但是F作为Function的实例,Function.prototype有b方法。因此这里的调用就没问题