使新关键字可选

时间:2012-11-08 00:26:24

标签: javascript constructor new-operator javascript-objects

说我想创建以下API:

var api = function(){}

api.prototype = {
  constructor: api,
  method: function() {
    return this;
  }
};

现在,这将像:

var myApi = new api();
myApi.method();

但是,假设我想将new关键字设为可选,这样就可以了:

api().method();

我会不理会:

var api = function() {
  if ( !(this instanceof api) ) {
    return new api();
  }
};

但是我想知道,这可能会以某种方式轻易被感染,或者使用这种方法还有其他危险吗?我知道f.ex jQuery不会这样做(他们将构造函数卸载到原型方法),所以我确信有充分的理由不这样做。我只是不认识他们。

2 个答案:

答案 0 :(得分:2)

在构造函数中返回一个对象。

function Car(){
   var obj = Object.create(Car.prototype);
   obj.prop = 1;
   return obj;
}
Car.prototype = {
    method: function (){ }
};

//test
var car1 = Car();
var car2 = new Car();

答案 1 :(得分:-1)

选择一个或另一个约定。如果要将对象用于API句柄,但不希望用户必须使用new,请使用两个函数。 Api()是对象的构造函数,api()是一个常规函数,只返回一个新的Api实例。

我认为你的建议没有危险,它看起来毫无意义,我不喜欢一个函数同时做两件事的想法。