0
基本的に私はこれを行うことができるようにしたい、私は新しい基幹アプリを始めている、と私は煎茶タッチ2.0のJavaScriptのクラス継承システムの非常に好きしてきた:バックボーンでSencha-Likeクラスの継承を達成するにはどうすればいいですか?
Helium.define('Application', {
namespace: 'Helium',
constructor: function() {
console.warn('Helium');
}
});
Helium.define('Application', {
namespace: 'MyApp',
extend: 'Backbone.Events',
routers: ['Cards'],
constructor: function() {
console.warn(this);
this.callParent();
console.warn('MyApp');
//console.warn(Helium.getDisplayName(arguments.callee));
}
});
私がこだわっていますプロトタイプチェーンの定義(this.callParent()仕事をする)上:ここに
var p = Object.create(extend);
var o = _.extend(p, data);
/*function() {
var _o = _.extend(p, data);
_o.constructor.apply(o, arguments);
return _o;
};*/
o.prototype.superclass = p;
o.prototype.callParent = function() {
console.warn(p);
};
は、これまでのところ、完全なマイクロ実装は次のとおりです。
:
これまでのところ、私はこれを行っています
_.mixin({
resolve : function(path, base, separator) {
var parts = path.split('.' || separator),
key = parts.pop();
base = base || window;
while (parts.length) {
part = parts.shift();
base = base[part] = base[part] || {};
}
base[key] = base[key] || {};
return base[key];
}});
Helium = {
define: function(className, data) {
var base = window,
extend = data.extend || {constructor : function() {}},
namespace = data.namespace || null;
if(namespace) {
window[namespace] = window[namespace] || {};
base = window[namespace];
}
if(_.isString(extend)) extend = _.resolve(extend);
if(!extend) throw 'Extend error';
var parts = className.split('.'),
key = parts.pop();
while (parts.length) {
part = parts.shift();
base = base[part] = base[part] || {};
}
delete data.extend;
//delete data.namespace;
data.$name = key;
data.$className = className;
var p = Object.create(extend);
var o = _.extend(p, data);
/*function() {
var _o = _.extend(p, data);
_o.constructor.apply(o, arguments);
return _o;
};*/
o.prototype.superclass = p;
o.prototype.callParent = function() {
console.warn(p);
};
},
getDisplayName: function(callee) {
console.warn('getDisplayName', [this, arguments]);
console.warn(callee.toString());
}
};
私はあなたが正しいと思うし、別の継承パターンをバックボーンに強制するのは無駄です。私はバックボーン拡張システムを保つつもりです。 – Olivier
バックボーンでthis.callParent()の実装に関する新しい特定のqを尋ねるつもりです(静的なMyApp .__ super __。methodNameのことを嫌うからです)。 – Olivier
新しい質問があなたの意図を明確に明確にします。私はあなたと一緒にいます。私は解決策を考えています。うまくいけば、あなたが提案したものより少しシンプルなものが誰かを知っています。 – tomswift