Javascript:如何在不复制但链接的情况下将另一个对象 B 的方法混合到我的对象 A
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 中混合一个方法,但不复制方法,而是想要对混合函数的定义进行赋值。
这怎么可能?
原型继承来拯救你:
var A = Object.create(B);
A.foo();
B.foo = …;
A.foo(); // something else
当然,这不再是严格意义上的"mixin",您只能通过原型链接从另一个对象继承(尽管您可以构建继承链)。
如果您希望将多个独立对象混合到现有的A
对象中,则这是不可能的。不好意思。
或者,您可以再次调用分配。 或者你可以做这样的事情: (但是,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
相关文章:
- 从 javascript 中的对象方法返回一个对象
- 通过引用Javascript中的另一个函数来传递对象方法
- 什么'是从对象列表中一次编辑一个对象的正确Angular/Firebase方法
- 有没有一种方法可以创建一个对象并同时为其指定一个动态特性
- 从一个对象中找出所有方法
- 将此(对象)传递到一个对象方法嵌套方法中
- 用javascript在一个对象的两个键上声明两个数组的简洁方法是什么
- javascript对象方法可以是一个操作吗
- 猫鼬对象方法不是一个函数
- Javascript:如何在不复制但链接的情况下将另一个对象 B 的方法混合到我的对象 A
- 将第一个(对象的)数组的属性复制到不同长度的另一个(对象)数组的Javascript方法
- 如何测试 javascript 方法是否创建一个对象并调用该对象上的方法
- Jquery:扩展一个对象来修改一个方法
- Jquery:一个jquery对象(方法链)上可以调用的函数数量是否有限制
- 从JSON创建一个对象,并在Javascript中给它一些方法
- JavaScript - 尝试从另一个对象内部访问一个对象方法,得到未定义的错误
- 在Javascript中声明一个对象上的方法时,如何正确引用该对象上的一个方法集
- Javascript this关键字和变量指向一个对象方法
- 如何在另一个对象方法中引用对象方法
- 在木偶视图中,我最好发布事件或调用另一个对象方法