Can I construct a JavaScript object without using the new keyword?

后端 未结 15 2800
北海茫月
北海茫月 2020-11-27 16:04

Here is what I\'d like to do:

function a() {
  // ...
}
function b() {
  //  Some magic, return a new object.
}
var c = b();

c instanceof b // -> true
c          


        
15条回答
  •  不知归路
    2020-11-27 17:02

    The simple answer to your specific question is: no.

    It would help you identified why you want to avoid new. Perhaps the patterns alluded to by one of the other answers will help. However none of them result in the instanceof returning true in your tests.

    The new operation is essentially:-

    var x = (function(fn) { var r = {}; fn.call(r); return r;}(b);
    

    However there is the difference that the constructing fn is attached to the object using some internal property (yes you can get it with constructor but setting it doesn't have the same effect). The only way to get instanceof to work as intended is to use the new keyword.

提交回复
热议问题