これが私の解決策です:
var inherits = function(child, parent) {
if (!_.isFunction(child) || !_.isFunction(parent))
throw new Error('`child` and `parent` must be functions.');
return _.reduce(Object.getPrototypeOf(child.prototype), function(memo, child_prototype__proto__) {
return _.contains(parent.prototype, child_prototype__proto__) && memo;
}, true);
}
したがって、次のことができます。
var MyRouter = Backbone.Router.extend();
inherits(MyRouter, Backbone.Router) // true
inherits(MyRouter, Backbone.Model) // false
extend
これは、バックボーンの機能が上記のように使用された単一層のバックボーン スタイルの継承で機能します。
Backbone はプロトタイプ チェーンをセットアップするときに次のことを行うため、動作しextend
ます。child
parent
var Surrogate = function(){ this.constructor = child; };
Surrogate.prototype = parent.prototype;
child.prototype = new Surrogate;
したがって、結果として得られるコンストラクターは、extend
そのプロパティに親のすべてのプロトタイプ プロパティを持ち.prototype.__proto__
ます。これが初めての場合やわかりにくい場合は、John Resig のブログで詳細を読むことができます。基本的に、"test".__proto__ === String.prototype
.