1

我在 javascript 中有一个“基类”,在下面的示例中我称之为“main”。我想在我创建的所有子类上使用主类中的一些方法和变量。

我在下面用我目前的想法做了两个例子。我想后者是首选,因为我将创建 的一些实例main,而且我听说prototype在拥有多个实例时这很有用。

我应该使用这两种方法中的任何一种,还是尝试在“类”之间创建继承?如果首选继承,请提供一个示例,因为我不知道如何实现它。

var main = (function(){

    var out = function() {};

    out.staticMethod = function(){
        alert('hello world');
    };

    return out;

})();

var child = (function(main){

    var out = function() {};

    out.prototype.useMainFunction = function(){
        main.staticMethod();
    };

    return out;

})(main);

var c = new child();
c.useMainFunction();

http://jsfiddle.net/mQPFJ/

var main = (function(){

    var out = function() {};

    out.prototype.publicMethod = function(){
        alert('hello world');
    };

    return out;

})();

var child = (function(main){

    var out = function() {};

    out.prototype.useMainFunction = function(){
        main.publicMethod();
    };

    return out;

})(new main());

var c = new child();
c.useMainFunction();

http://jsfiddle.net/mQPFJ/1/

4

2 回答 2

5

我将建议一种不同的方法:

function Main(){
  this.message = "Parent";
}

Main.prototype.out = function(){
    alert(this.message);
};

function Child(){
   this.message = "Child";
};

Child.prototype = new Main();

var child = new Child();
child.out();

var main = new Main();
main.out();

这种方法使用function constructor. 第一个类main被赋予一个属性out,它被分配了一个函数。第二个类Child将其原型分配给 的新实例Main,从而在两个类之间创建继承。

工作示例:http: //jsfiddle.net/8QW46/

关于您关于哪种方法最好的问题

我建议使用不使用原型的第一种方法。我建议这样做的原因是您实际上并未使用类(在 Javascript 中,类被更好地描述为对象定义)。您创建函数的实例。通常原型用于向类的所有实例添加函数。

这是使用您的方法无法实现的示例,可通过类/对象定义获得:http: //jsfiddle.net/smmb3/

于 2013-03-29T16:15:25.710 回答
0
function Main(){
    this.out = function(message){
        alert(message);
    }
}

function Child(){
    this.message = "no more hello world programs";
}

Child.prototype = new Main;

var kid = new Child;
kid.out(kid.message);

与@Kevin 的答案类似,但它比您当前的代码更简洁,而且更干燥。

于 2013-03-29T16:33:32.310 回答