因此,我一直在使用一些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();
})
但是,,,问题是,我们混淆了全局命名空间,每个对象都重复了函数属性,而实际上我们只想要私有变量的复制。
因此,为了解决这个问题,我想要寻找的是一个比函数继承更好的方法。我考虑过构建一个psuedo古典继承结构,在这里我将私有和公共变量/函数分开,但是我还没有想出一个比函数式继承更少开销的版本。
发布于 2012-09-10 08:49:51
如果要为每个对象创建一组新的私有变量,则需要将父对象的构造函数与子对象的构造函数进行打电话。不要使用父对象的实例作为子对象的原型对象,而只是从父对象的原型对象继承的对象。这可以用Object.create
来完成
function myextended() {
mybase.call(this); // apply the parent's constructor on the new object
this.hi();
}
myextended.prototype = Object.create(mybase.prototype);
(演示)
发布于 2012-09-10 08:48:52
如何将变量作为原型的一部分:
function mybase() {
this.hi = function() {
var ele = $('<div></div>');
ele.html(this.c++);
$('body').append(ele);
}
}
mybase.prototype.c = 0;
注意:或者,您可以在声明mybase时初始化this.c
。
https://stackoverflow.com/questions/12356032
复制