编程语言
首页 > 编程语言> > Javascript实现困境:寻找具有方法覆盖解决方案的类

Javascript实现困境:寻找具有方法覆盖解决方案的类

作者:互联网

我不是Java专家.我已经开发了一个操作页面,使用一个函数为我的一些JS代码定义一个类(如here所述).此类非常复杂,有助于计算对象位置.现在已经过测试并可以运行.

我正在研究新页面,我想重用该课程.但是,对于每个页面,至少应重写此类的一种方法(如Java中的方法).我读过另一个SO问题,即不可能覆盖Javascript中的方法.

我当时正在考虑修改类原型,但是如果这样做,所有类实例都将被修改.

我非常不愿意为每页重复我的课程代码.有没有很好/优雅的解决方案来解决这个问题?谢谢.

因此,考虑到ŠimeVidas在Adam Rackis解决方案之上的评论:

function Base(){}
Base.prototype.foo = function() { alert("base"); };

function Derived() {}

Derived.prototype = Object.create( Base.prototype );
Derived.prototype.foo = function() { alert("overridden"); };


var b = new Base();
var d = new Derived();

b.foo();
d.foo();

参见:http://jsfiddle.net/8Gq7C/

解决方法:

您可以重载Javascript中的函数.创建一个新的函数构造函数,该函数构造函数从具有要重载的方法的函数继承,然后在派生函数的原型上更改方法.

它看起来像这样:

function Base(){}
Base.prototype.foo = function() { alert("base"); };

function Derived() {}

//Derived.prototype = new Base(); //not ideal - see the comments
Derived.prototype = Object.create(Base.prototype); //grab MDN shim for older IE
Derived.prototype.constructor = Derived;

Derived.prototype.foo = function() { alert("overridden"); };

var b = new Base();
var d = new Derived();

b.foo();
d.foo();

LIVE DEMO

标签:function-overriding,javascript,class
来源: https://codeday.me/bug/20191101/1986804.html