我在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();
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();
答案 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比你当前的代码更多。