如何从原型方法创建对象的实例
How to create instance of object from prototype method
如果原型用于多个子类,是否可以从其原型创建对象的实例?
例如,如果我有:
var BaseClass = Backbone.Model.extend({
createNewForMap: function(map) {
// Here I would like to create a new instance of the
// class that the method is being called for.
}
});
var ClassOne = BaseClass.extend({});
var ClassTwo = BaseClass.extend({});
然后,在我的应用程序代码中,我希望能够调用:
var model = ClassOne.createNewForMap(map);
或
var model = ClassTwo.createNewForMap(map);
并且使model
是ClassOne
或ClassTwo
的实例。
可以在BaseClass
上定义一个静态方法,该方法将作为它或继承它的任何子类的工厂函数。
Backbone.Model.extend允许您指定所谓的classProperties
,它可能被认为类似于保守OOP编程中的静态方法。
var BaseClass = Backbone.Model.extend({}, {
// A static method for invoking constructor function.
createNewForMap: function(map) {
return new this;
}
});
var ClassOne = BaseClass.extend({
initialize: function() { this.foo = 'bar' }
});
var ClassTwo = BaseClass.extend({
initialize: function() { this.foo = 'buz' }
});
console.log(ClassTwo.createNewForMap().foo); // buz
<script src="//underscorejs.org/underscore-min.js"></script>
<script src="//backbonejs.org/backbone-min.js"></script>
您可以使用constructor
属性来获取对对象"class"的引用:
对象.原型.构造函数
返回对创建实例原型的
Object
函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串。
所以你可以说:
createNewForMap: function(map) {
var obj = new this.constructor();
//...
}
并且CCD_ 8将是与CCD_。
演示:https://jsfiddle.net/ambiguous/avk4z6Le/
相关文章:
- 代码挑战:创建一个跟踪对象实例总数的类Foo
- 创建一个类,该类使用es6类语法将Function对象创建为实例
- JavaScript - 有没有办法动态创建对象的新实例
- 如何在Javascript中创建多个对象实例
- 在每个循环中创建对象实例
- 当类型存储在变量中时,不使用eval创建对象的实例
- bootstrap选择javascript实例化不创建对象
- 使用模块模式时,如何创建对象的新实例
- 使用 JSON 创建对象的实例
- 从javascript中的未知对象创建新实例
- 在不创建对象实例的情况下访问原型属性
- 如何从原型方法创建对象的实例
- 在jquery点击函数中创建对象的实例
- js代码在创建对象的新实例后显示错误
- Object.create是否创建对象文字的实例
- 创建对象实例时不显示控制台日志记录
- Javascript:从已经实例化的对象和原型中创建对象
- 创建对象的新实例
- 如何在javascript中基于参数创建对象的单例实例
- 为什么重新定义函数如此重要?在任何对象实例化之前创建原型