Javascript 声明构造函数的优点/缺点

Javascript 声明构造函数的优点/缺点,javascript,Javascript,我不熟悉JavaScript中的原型和构造函数。我看到有人这样声明构造函数: var Person = (function(){ function Person(name, age){ this.name = name; this.age = age; } Person.prototype.setName = function(name){ this.name = name; } Person.prototype.setAge =

我不熟悉JavaScript中的原型和构造函数。我看到有人这样声明构造函数:

var Person = (function(){
    function Person(name, age){
        this.name = name;
        this.age = age;
    }

    Person.prototype.setName = function(name){ this.name = name; }
    Person.prototype.setAge = function(age){ this.age = age }

    return Person;
}());

这是正确的方法吗?

是的,这是正确的形式,但不是唯一的形式。这相当于:

function Person(name, age){
    this.name = name;
    this.age = age;
}

Person.prototype.setName = function(name){ this.name = name; }
Person.prototype.setAge = function(age){ this.age = age }

您提供的代码将类声明封装在一个名称空间中,这是一个很好的实践。

是的,它是正确的形式,但不是唯一的形式。这相当于:

function Person(name, age){
    this.name = name;
    this.age = age;
}

Person.prototype.setName = function(name){ this.name = name; }
Person.prototype.setAge = function(age){ this.age = age }

您提供的代码将类声明封装在一个名称空间中,这是一个很好的实践。

是的,它是正确的形式,但不是唯一的形式。这相当于:

function Person(name, age){
    this.name = name;
    this.age = age;
}

Person.prototype.setName = function(name){ this.name = name; }
Person.prototype.setAge = function(age){ this.age = age }

您提供的代码将类声明封装在一个名称空间中,这是一个很好的实践。

是的,它是正确的形式,但不是唯一的形式。这相当于:

function Person(name, age){
    this.name = name;
    this.age = age;
}

Person.prototype.setName = function(name){ this.name = name; }
Person.prototype.setAge = function(age){ this.age = age }

您提供的代码将类声明封装在一个名称空间中,这是一个很好的实践。

效果很好。该代码以这种方式声明构造函数,因为它希望使用定义实际构造函数及其原型方法的IIFE(立即调用的函数表达式),将与
人相关的代码保留在自己的“范围”或“命名空间”中

通常,要创建构造函数,您只需要:

  • 函数
  • 在用作构造函数的函数中,使用“this”修改正在创建的对象
  • 使用
    new
    操作符调用该函数
  • 所以,真的,只是做:

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    Person.prototype.setName = function(name) { this.name = name; }
    Person.prototype.setAge = function(age) { this.age = age; }
    
    var me = new Person('Tom', 38);
    

    这就是你所需要的例子。IIFE作用域和返回构造函数只是为Person类型创建“module”类型的一种方法。

    效果很好。该代码以这种方式声明构造函数,因为它希望使用定义实际构造函数及其原型方法的IIFE(立即调用的函数表达式),将与
    人相关的代码保留在自己的“范围”或“命名空间”中

    通常,要创建构造函数,您只需要:

  • 函数
  • 在用作构造函数的函数中,使用“this”修改正在创建的对象
  • 使用
    new
    操作符调用该函数
  • 所以,真的,只是做:

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    Person.prototype.setName = function(name) { this.name = name; }
    Person.prototype.setAge = function(age) { this.age = age; }
    
    var me = new Person('Tom', 38);
    

    这就是你所需要的例子。IIFE作用域和返回构造函数只是为Person类型创建“module”类型的一种方法。

    效果很好。该代码以这种方式声明构造函数,因为它希望使用定义实际构造函数及其原型方法的IIFE(立即调用的函数表达式),将与
    人相关的代码保留在自己的“范围”或“命名空间”中

    通常,要创建构造函数,您只需要:

  • 函数
  • 在用作构造函数的函数中,使用“this”修改正在创建的对象
  • 使用
    new
    操作符调用该函数
  • 所以,真的,只是做:

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    Person.prototype.setName = function(name) { this.name = name; }
    Person.prototype.setAge = function(age) { this.age = age; }
    
    var me = new Person('Tom', 38);
    

    这就是你所需要的例子。IIFE作用域和返回构造函数只是为Person类型创建“module”类型的一种方法。

    效果很好。该代码以这种方式声明构造函数,因为它希望使用定义实际构造函数及其原型方法的IIFE(立即调用的函数表达式),将与
    人相关的代码保留在自己的“范围”或“命名空间”中

    通常,要创建构造函数,您只需要:

  • 函数
  • 在用作构造函数的函数中,使用“this”修改正在创建的对象
  • 使用
    new
    操作符调用该函数
  • 所以,真的,只是做:

    function Person(name, age) {
      this.name = name;
      this.age = age;
    }
    Person.prototype.setName = function(name) { this.name = name; }
    Person.prototype.setAge = function(age) { this.age = age; }
    
    var me = new Person('Tom', 38);
    

    这就是你所需要的例子。IIFE作用域和返回构造函数只是为Person类型创建“模块”类型的一种方法。

    其他人没有提到的是,在您的IIFE中,所有函数都变成闭包,您可以将其用于共享私有或受保护的成员

    因为在示例中没有使用闭包变量,所以在生活中包装它是没有用的,除非出于美学原因您喜欢它


    关于原型的更多信息:

    其他人没有提到的是,在您的IILife中,所有函数都变成闭包,您可以将其用于共享私有或受保护的成员

    因为在示例中没有使用闭包变量,所以在生活中包装它是没有用的,除非出于美学原因您喜欢它


    关于原型的更多信息:

    其他人没有提到的是,在您的IILife中,所有函数都变成闭包,您可以将其用于共享私有或受保护的成员

    因为在示例中没有使用闭包变量,所以在生活中包装它是没有用的,除非出于美学原因您喜欢它


    关于原型的更多信息:

    其他人没有提到的是,在您的IILife中,所有函数都变成闭包,您可以将其用于共享私有或受保护的成员

    因为在示例中没有使用闭包变量,所以在生活中包装它是没有用的,除非出于美学原因您喜欢它


    更多关于原型的信息:

    感谢编辑DavidHanks的编辑DavidHanks的编辑DavidHanks的编辑DavidHanks的编辑DavidHanks您链接到“原型继承-写作”的帖子似乎是一个阅读该主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)