parseFloat = (function(_super) {
return function() {
// Extend it to log the value for example that is passed
console.log(arguments[0]);
// Or override it by always subtracting 1 for example
arguments[0] = arguments[0] - 1;
return _super.apply(this, arguments);
};
})(parseFloat);
就像你平时说的那样:
var result = parseFloat(1.345); // It should log the value 1.345 but get the value 0.345
class A {
// parent method
print() {
console.log("class A");
}
}
class B extends A {
// override method
print() {
console.log("class B");
}
parentPrint() {
super.print();
}
}
const b = new B();
b.print(); // prints "class B" from override method
b.parentPrint(); // prints "class A" from parent method
为了将这种方法应用到 Number.parseFloat,我们可以这样做:
class B extends Number {
// overrides `parseFloat` from Number class
parseFloat() {
super.parseFloat();
}
}
const b = new B();
b.parseFloat();
然而,现代实践更倾向于组合而不是面向对象继承。
与组合相比,继承被认为是混乱、脆弱和缺乏灵活性的。例如,React (Facebook)和 Go (Google)编程语言都鼓励组合: