
[英]Javascript: How can I mix in methods of other Objects B, C to my Object A without copying but with linking?
[英]Javascript: How can I mix in methods of another Object B to my Object A without copying but with linking?
如果创建对象A:
let A = {};
并想混入另一个对象B中的方法:
let B = {
foo() {
alert("Boo!");
}
};
通常我会打电话给:
Object.assign(A, B);
然后我改变我的函数foo:
Object.assign(B, {
foo() {
alert("Hooray!");
}
});
之后,我叫foo:
A.foo(); // Actual output: "Boo!"
但我希望那个输出是“万岁!”。 到目前为止,我发现,Object.assign只复制目标中的方法,但它不会链接它们。 关于继承和组合我在这里找到了有用的博客: 为什么原型继承很重要 ,最重要的是: 理解原型,授权和组合
我想在一个Object中混合一个方法,但不要复制方法,更多的是我想要一个赋值混合函数的定义。
这怎么可能?
要么,您再次调用分配。 或者,您也可以执行以下操作:(但是javascript中没有指针:对象总是通过引用传递的(与普通值(如数字,字符串等)通过值传递相反)。
因此:
var my = {
f: function() { return "haa" }
}
var o1 = {};
Object.assign(o1, {my: my}); // this is the crucial point, you are assigning a reference to my
o1.my.f() // "haa";
my.f = function() { return "hoooo" };
o1.my.f() // "hoooo";
经过研究,我发现更简单了一些:
var my = {
f: function() { return "haa" }
}
var o1 = new Object(my); // create an object of the prototype my;
o1.f(); // haa;
my.f = function() { return "hoooo" };
o1.f() // hoooo
原型继承可助您一臂之力:
var A = Object.create(B);
A.foo();
B.foo = …;
A.foo(); // something else
当然,这不再是严格的“mixin”,你只能通过原型链接继承其他对象(尽管你可以构建一个继承链)。
如果您希望将多个独立对象混合到现有A
对象中,那么这是不可能的。 抱歉。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.