Javascript 声明构造函数的优点/缺点
我不熟悉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 =
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您链接到“原型继承-写作”的帖子似乎是一个阅读该主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)你链接到“原型继承-写起来”的帖子似乎是一个阅读这个主题的好地方。谢谢你的链接:)