素材牛VIP会员
红皮书说的借用构造函数继承问题
 vv***cv  分类:Html5  人气:723  回帖:3  发布于6年前 收藏

javascript高级程序设计 p167 页说借用构造函数无法函数复用,而且在超类型的原型中定义的方法,对子类型不可见

1.为什么不能函数复用?下面代码不算复用吗?

function Super(name) {
    this.name = name
    this.say = function () {
        console.log(this.name)
    }
}

function Sub(name) {
    Super.call(this, name)
}

var i1 = new Sub('sub1')
var i2 = new Sub('sub2')

i1.say()
i2.say()

2.在超类型的原型中定义的方法,对子类型不可见什么意思?

讨论这个帖子(3)垃圾回帖将一律封号处理……

Lv6 码匠
wu***he CEO 6年前#1

p167 页说借用构造函数无法函数复用,而且在超类型的原型中定义的方法,对子类型不可见

你的方法并没有定义在原型上,是定义在对象上了!

      Super.prototype.say=function () {
                console.log(this.name)
            }

这个角定义在超类的原型上!

Lv3 码奴
醋***1 技术总监 6年前#2

1.借用构造函数也是构造函数,所以每一个实例的里面的函数都是单独,并不是复用同一个函数,这在144页的构造函数里面有提及。

2.简单来说,因为super.prototype不等于sub.prototype,所以当你用

super.prototype.func = func;

给超类定义一个函数时,通过new sub()得到的实例并没有这个函数。所以说对于子类不可见。

Lv1 新人
陌***人 PHP开发工程师 6年前#3

1.方法在构造函数内定义的。。每创建一个实例都会有一个 say function创建,P146页有说。
2.子类型并没有指向超类型的原型,所以是不可见的。。? 如果有,应该是要加Sub.protorype=new Super()吧。。就是后面组合继承

#不知道是不是这样#

 文明上网,理性发言!   😉 阿里云幸运券,戳我领取