所以我一直在搞乱一些 JavaScript 继承技术,这里有一个案例,我试图得出一个强有力的解决方案。
这是一个简单的例子:http: //jsfiddle.net/JgrYu/
问题:从逻辑上讲,我们希望两个 div 都是 0。但是由于我们只是在更新扩展类,所以我们不会重新生成我们的“c”变量。
一个潜在的解决方法是使用功能继承:http: //jsfiddle.net/h8xtz/
function mybase() {
var that = {};
var c = 0;
that.hi = function() {
var ele = $('<div></div>');
ele.html(c++);
$('body').append(ele);
}
return that;
}
function myextended() {
var that = mybase();
that.hi();
return that;
}
myextended.prototype = new mybase();
$(document).ready(function() {
var a = myextended();
var b = myextended();
})
然而,这样做的问题是我们使全局命名空间变得混乱,并且每个对象都复制了功能属性,而实际上我们只想要复制私有变量。
所以,我正在寻找一种比功能继承更好的方法来解决这个问题。我曾考虑过制作一个伪经典继承结构,在其中分离私有和公共变量/函数,但我无法想出一个开销低于函数继承的版本。