Javascript this.superclass.constructor()和extend()

rslzwgfq  于 2023-04-10  发布在  Java
关注(0)|答案(2)|浏览(110)

这些代码是从《学习Javascript设计模式》一书中抽象装饰器的例子中提取出来的,我被this.superclass.constructor()extend()弄糊涂了。
我可以理解this指的是myMacbookPro,这里是CaseDecorator的一个示例。但是this.superclass指的是什么?为什么不只是this.constructor(macbook)
CaseDecorator的超类是MacbookDecorator?继承发生在哪里?它们是原生Javascript的一部分还是第3方库?
谢谢

var CaseDecorator = function(macbook) {
    // call the superclass's constructor next
    this.superclass.constructor(macbook);
};

// Let's now extend the superclass
extend(CaseDecorator, MacbookDecorator); 
....
// Decorate the macbook
myMacbookPro = new CaseDecorator(myMacbookPro);
t9eec4r0

t9eec4r01#

让我们构造extend函数并改变调用超类的方式:

function extend(subClass, superClass) {
    var F = function() {}
    F.prototype = superClass.prototype
    subClass.prototype = new F()
    subClass.prototype.constructor = subClass
    subClass.superclass = superClass.prototype
    if(superClass.prototype.constructor === Object.prototype.constructor){
        superClass.prototype.constructor = superClass
    }
}

超类调用方法:

CaseDecorator.superclass.constructor.call(this, macbook)
bttbmeg0

bttbmeg02#

Extend接受两个对象,并将它们组合在一起。如果您有两个相同的属性,但其中一个对象中有第三个属性,则最终对象具有三个属性。示例:

var object1 = { name: "Test1", sex: "male" };
var object 2 = { job: "Worker" }

var extendedObject = $.extend(object1, object2);

扩展对象将是:

objectExtended = { name: "Test", sex: "male", job: "Worker" }

相关问题