我有一个几乎一直使用的名为a
的对象。
然后'b'变得笨拙,在调用notify之前,我需要做其他一些事情。
获取同一对象的最佳功能/原型方法是什么?在面向对象的情况下称为父对象(据我了解,如果不使用Javascript类就无法实现-如果我错了,请纠正我)
let a = {};
a.notify = () => {
doSomethingCool();
}
var b = Object.create(a);
b.notify = () => {
doCoolStuffFirst();
doSomethingCool();
}
答案 0 :(得分:0)
不清楚您要问什么。您只是在寻找
const notify_orig = b.notify;
b.notify = () => {
doCoolStuffFirst();
notify_orig.call(b);
}
?
答案 1 :(得分:0)
正如您所说,使用类很容易:
class A {
notify() {
doSomethingCool();
}
}
class B {
notify() {
doCoolStuffFirst();
super.notify();
}
}
如果没有ES6课程,您将遇到困难。 ES6编译器将super.notify()
转换为类似的
_get(
B.prototype.__proto__ ||
Object.getPrototypeOf(B.prototype),
"notify", this
).call(this);
(_get
是一种巨大的实用程序方法,用于平滑有关各种类型的值以及继承和填充的粗糙边缘)。这不是不可能,它太复杂了,您可能不想自己做。
答案 2 :(得分:0)
不使用__proto__
或class
(ES6中的语法糖)。
function doSomethingCool() {
console.log("something cool");
}
function doCoolStuffFirst() {
console.log("cool stuff first");
}
let a = {};
a.notify = () => {
doSomethingCool();
}
a.notify();
let b = Object.create(a)
b.notify = (() => {
let notifySuper = b.notify; // reference to the 'super' method
return () => {
doCoolStuffFirst();
notifySuper();
}
})();
b.notify();