构造函数的原型

(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方法。因此这里的调用就没问题

posted on 2020-03-28 17:53  冯亮  阅读(484)  评论(0编辑  收藏  举报

导航