【问题标题】:Comparing2 different Javascript Constructor method [duplicate]比较2种不同的Javascript构造方法[重复]
【发布时间】:2017-08-23 16:48:40
【问题描述】:

我是 JavaScript 新手,发现下面两种不同的方法都可以实例化对象。

我查看了从两个构造函数创建的对象,它对我来说似乎是一样的。

但我不确定这两种方法有什么区别?在哪种情况下一种方法比另一种更好?

谁能解释一下?谢谢。

Person1.js

function Person1(name){
    this.name = name;
    this.initialize();
}

Person1.prototype.initialize = function (todoName) {
    console.log("Initalize function Person 1 class"+this);
    f1(this);
}

function f1(caller) {
    console.log("F1 Person 1 class"+this);
    console.log(this);
    console.log("F1 Person 1 class caller"+caller);
    console.log(caller);
}

Person2.js

var Person2 = (function(){

function Person2(name){
    this.name = name;
    this.initialize();
}

Person2.prototype.initialize = function (todoName) {
    console.log("Initalize function Person 2 class"+this);
    f1(this);
}

function f1(caller) {
    console.log("F1 Person 2 class"+this);
    console.log(this);
    console.log("F1 Person 2 class caller"+caller);
    console.log(caller);
}

return Person2;
})();

使用以下代码实例化对象:

var p1 = new Person1("P1");
var p2 = new Person2("P2");

console.log("Completed ");
console.log("P1 ");
console.log(p1);
console.log("P2 ");
console.log(p2);

【问题讨论】:

    标签: javascript constructor


    【解决方案1】:

    Person2 包含在所谓的立即调用函数表达式(或 IIFE)中。您会注意到,最后它返回Person2,这就是示例第一行的赋值有效的原因。

    您会考虑使用此方法的原因是,将代码包装在 IIFE 中可以使您的全局范围保持干净(这意味着,例如,在浏览器中,window 对象不会被一堆全局属性弄得一团糟)。

    作为初学者,我可能会选择Person1 方法,因为它在视觉上更简单,也更容易跟踪正在发生的事情。但是,随着您的进步,请牢记以上几点,并考虑什么对您的代码库的可维护性最有利。

    【讨论】:

      猜你喜欢
      • 2016-06-18
      • 2020-12-15
      • 1970-01-01
      • 2016-12-15
      • 2017-04-06
      • 2016-10-11
      • 2020-11-24
      • 1970-01-01
      相关资源
      最近更新 更多