javascript - 使新关键字可选

标签 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 不会这样做(它们将构造函数卸载到原型(prototype)方法),所以我确信有充分的理由不这样做。我只是不认识他们。

最佳答案

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

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

关于javascript - 使新关键字可选,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13280639/

相关文章:

javascript - JavaScript 中的 new 运算符如何工作?

javascript - Uncaught SyntaxError : Unexpected token export - popper. js错误

javascript - 为什么即使输入数字是 Javascript 中的字符串,年龄计算器也能正常工作?

Java:在构造函数或方法中传递参数?

c++ - 构造函数和默认构造函数的区别

javascript - 如何制作div slidedown

javascript - 如何使用 WebGL 在运行时更新立方体的 Material ?

javascript - Texboxes 空警报按钮

c++ - 从 C++ 构造函数调用其他函数

java - C++中new运算符和java中new运算符的区别