6

我刚刚了解到我可以覆盖Javascript 类中的方法,如下所示,但是实际的构造函数呢?

如果可能的话,如何在不实例化类的情况下做到这一点?

var UserModel = (function() {
  var User;
  User = function() {}; // <- I want to overwrite this whilst keeping below methods
  User.prototype.isValid = function() {};
  return User;
})();
4

2 回答 2

8

只是暂时保存prototype对象,然后替换构造函数:

var proto = UserModel.prototype;
UserModel = function () { /* new implementation */ };
UserModel.prototype = proto;
于 2012-11-14T21:39:52.517 回答
0

基本上,您创建一个什么都不做的临时函数,您将其原型设置为具有父类的原型,然后您可以将基类用作父类而不调用其构造函数。

如果需要从子类的构造函数中引用父类的构造函数,只需要使用Function.prototype.apply转发构造函数调用即可。

Javascript继承模型:

// Base class

var Base = function ( ) {
    this.foo = 40;
};

Base.prototype.bar = function ( ) {
    return this.foo;
};

// Inherited class

var Child = function ( ) {
    Base.apply( this, arguments );
    this.foo += 2;
};

var F = function ( ) { };
F.prototype = Base.prototype;
Child.prototype = new F( );
于 2012-11-14T21:41:14.483 回答