Javascript 如何从prototype方法创建对象实例

Javascript 如何从prototype方法创建对象实例,javascript,backbone.js,Javascript,Backbone.js,如果原型用于多个子类,是否可以从其原型创建对象的实例 例如,如果我有: 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 = Base

如果原型用于多个子类,是否可以从其原型创建对象的实例

例如,如果我有:

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);


并且将
模型
作为
一类
二类
的实例,可以在
基类
上定义一个静态方法,该方法将作为它或继承它的任何子类的工厂函数

允许您指定所谓的
classProperties
,这可能被认为与保守的OOP编程中的静态方法类似

var BaseClass=Backbone.Model.extend({}{
//用于调用构造函数的静态方法。
createNewForMap:函数(映射){
返回新的这个;
}
});
var ClassOne=BaseClass.extend({
初始化:函数(){this.foo='bar'}
});
var ClassTwo=BaseClass.extend({
初始化:函数(){this.foo='buz'}
});
console.log(ClassTwo.createNewForMap().foo);//buz

您可以使用该属性获取对对象“类”的引用:

Object.prototype.constructor

返回对创建实例原型的
对象
函数的引用。请注意,此属性的值是对函数本身的引用,而不是包含函数名称的字符串

所以你可以这样说:

createNewForMap: function(map) {
  var obj = new this.constructor();
  //...
}
obj
将是与
相同的类型


演示:

var model=new ClassOne()
然后
model.createNewForMap(map)
?为什么不能只做
new ClassOne()
new ClassTwo()
来创建它们的实例呢?@TJ或者如果只有一个实例就使用它。
createNewForMap: function(map) {
  var obj = new this.constructor();
  //...
}