javascript - 不同对象符号之间的区别

标签 javascript object web

使用内联对象构造函数创建对象与通过立即调用构造函数创建对象有什么区别?我总是做后者,因为它使我不必自己调用 init() 之类的东西,并且感觉这是正确的做法,但我一直在其他人的代码中看到对象表示法,并且想知道我是否还有其他区别没看见。

示例:

window.fooModule = {

  init: function() {
    this.bar = "cee";    
    doStuff();
  },

  doStuff: function() {
    ...
  }
}

window.fooModule.init();

例子2:

window.fooModule = new function(){
  this.bar = "Cee";

  this.doStuff = function() {
    ...
  }


  this.doStuff();
}

最佳答案

在第一个符号中,变量 fooModel 是在没有调用构造函数的情况下创建的对象,在第二个符号中,fooModel 是通过调用构造函数作为匿名函数创建的对象,因此当使用 调用 new 关键字构造函数并从其原型(prototype)创建对象(在此示例中未声明原型(prototype),因此它是标准对象原型(prototype))。

结论

如果您的对象必须调用某些代码,请使用第二种表示法 什么时候创建,没有就先使用。

关于第二种表示法的更多信息

第二个符号也允许在构造函数中使用本地(私有(private))变量和函数,因为构造函数给了我们自己的范围。

var obj=new function(){

  var priv="Local scope variable";

  var method=function(){

    console.log("Local method");
  };

  this.doStuff=function(){

     //here local methods and variables can be used
  };
};

带有构造函数和 new 的第二种表示法更常用于标准构造函数声明和原型(prototype)声明。如果我们需要创建一个以上的对象,这是正确的方法。 方法和每个共享属性应该在原型(prototype)而不是构造函数中声明。

var ExampleClass=function(bar){

   //constructor
   this.bar = bar;
};

ExampleClass.prototype.doStuff=function(){

};

创建这样的对象:

var a=new ExampleClass("A bar"); //a.bar is "A bar"
var b=new ExampleClass("B bar"); //b.bar is "B bar"

对象 ab 具有相同的原型(prototype)(它节省内存)但是它们可以在构造函数中设置不同的属性。

关闭顶部

在 javascript 中有很多创建对象的可能性,我有第三个示例如何以第一种表示法运行代码:

window.fooModule = {

  init: function() {
    this.bar = "cee";    
    this.doStuff();

    return this;//return this
  },

  doStuff: function() {

  }
}.init();//run init after object notation

我一次创建对象并运行 init。

关于javascript - 不同对象符号之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39411764/

相关文章:

javascript - jQuery如何确定循环中的递归级别

javascript - 如何使用 PHP 处理 Controller 的 XMLhttp 请求

JAVASCRIPT:具有自动生成的选定值组合的动态表行

c++ - 创建 C++ 对象

html - 如何在我的谷歌地图旁边添加 CSS 表格?

javascript - 通过 .ajax() 请求添加动态 HTML 的正确方法

ios - uitableview 对象数组作为数据源

创建一个结构体,其中包含带有自定义对象的二维链表数组

javascript - 在网页中打印多个选定的图像

asp.net - 缩放 azure 网站