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();
//...
}