gpt4 book ai didi

javascript - 使用 jquery 的 extend 函数对象继承

转载 作者:行者123 更新时间:2023-11-30 08:50:56 25 4
gpt4 key购买 nike

我正在尝试使用 jquery extend 模拟继承,但据我测试,它仅适用于对象。

我想要完成的是:

var baseDefinition = function() {
var self = this;

self.calc1 = function() {
return "something1";
}

self.calc2 = function() {
return "something2";
}

self.myObject = {
propA = 100;
propB = 200;
};
}

var derivedDefinition = function() {
var self = this;

self.calc2 = function() {
return "something different from base";
}

self.myObject = {
propB = 400;
};
}

var instance = $.extend(true, {}, baseDefinition, derivedDefinition);

所以我希望从基本定义创建一个新实例,其中派生定义将应用于基本定义,但两个定义都不会被“触及”。可能吗?

我希望避免任何原型(prototype),所以基本上我想调用 instance.calc1 或 instance.calc2 而不知道它是否被覆盖。

编辑:

在我的示例中,我没有包含任何对象属性,这导致我使用 jquery 的扩展函数。尽管这两个答案都解决了内部函数“继承”,但它并没有(显然)像 extend 那样合并对象属性。作为一种可能的解决方案,我正在考虑在创建实例后循环遍历实例的属性并对它们应用 jquery 的扩展。虽然这对我来说似乎效率低下,但我不知道您是否可以建议我采取其他行动。

最佳答案

JQuery 扩展不会创建继承层次结构,因此您在扩展后对基本定义所做的更改不会反射(reflect)在派生定义中。以下是如何使用 Javascript 原型(prototype)继承以一种确实反射(reflect)继承层次结构中后续更改的方式扩展基本定义:

var baseDefinition = function() {};

baseDefinition.prototype.calc1 = function() {
return "something1";
};

baseDefinition.prototype.calc2 = function() {
return "something2";
};


var derivedDefinition = function() {};

derivedDefinition.prototype = Object.create(baseDefinition.prototype);

derivedDefinition.prototype.calc2 = function() {
return "something different from base";
};

var instance = new derivedDefinition();
instance.calc1(); // something1
instance.calc2(); // something different from base

关于javascript - 使用 jquery 的 extend 函数对象继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17958783/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com