在“类”之间共享方法和属性

时间:2013-03-29 16:09:52

标签: javascript oop

我在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/

2 个答案:

答案 0 :(得分: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类中更好地描述为对象定义)。您创建函数的实例。通常使用prototype将函数添加到类的所有实例中。

以下是使用您的方法无法实现的示例,该方法可用于类/对象定义:http://jsfiddle.net/smmb3/

答案 1 :(得分: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);

与@Kir的回答类似,但它的详细程度更低,而且DRYER比你当前的代码更多。