|
|
|
| есть некий плагин, который реализует "ооп" на жс.
(function($){
var initializing = false,
fnTest = /xyz/.test(function(){
xyz;
}) ? /\b_super\b/ : /.*/;
jQuery.Class = function(){};
// Create a new Class that inherits from this class
jQuery.Class.create = function(prop) {
var _super = this.prototype;
// Instantiate a base class (but only create the instance,
// don't run the init constructor)
initializing = true;
var prototype = new this();
initializing = false;
// Copy the properties over onto the new prototype
for (var name in prop) {
// Check if we're overwriting an existing function
prototype[name] = typeof prop[name] == "function" && typeof _super[name] == "function" && fnTest.test(prop[name])
? (function(name, fn){
return function() {
var tmp = this._super;
// Add a new ._super() method that is the same method
// but on the super-class
this._super = _super[name];
// The method only need to be bound temporarily, so we
// remove it when we're done executing
var ret = fn.apply(this, arguments);
this._super = tmp;
return ret;
};
})(name, prop[name])
: prop[name];
}
// The dummy class constructor
function Class() {
// All construction is actually done in the init method
if ( !initializing && Class.prototype.init )
return Class.prototype.init.apply(this, arguments);
}
// Populate our constructed prototype object
Class.prototype = prototype;
// Enforce the constructor to be what we expect
Class.prototype.constructor = Class;
// And make this class extendable
Class.extend = arguments.callee;
return Class;
};
})(jQuery);
|
но если наследовать с помощью этого дела дочерние классы, почему-то у них у всех, свойства которые являются объектом (массив, []) общие.. никак не могу понять в чем дело и как это пофиксить.
например:
var a = $.Class.create({});
var b = a.extend({
object: []
});
var c = b.extend({});
var d = b.extend({});
var x = new c();
var y = new d();
x.object.push(1,2,3);
alert(y.object); // в результате получаем "1,2,3" хотя этот объект не трогали вообще.
|
собственно когда мы создали c & d то у них по сути должны быть разные свойства object, т.к. они скопированы из объекта b. Но почемуто у всех у них одинаковое свойство...
Я сначала думал что они все(c,d) получают не копию объекта, а ссылку от b. Пробовал при копировании свойств из родительского класса (при екстенде) перевести в JSON и обратно (мало ли :), но ничего не вышло, как было так и осталось.
Помогите разобраться пожалуйста. | |
|
|