javascript构造函数的差异
difference on javascript constructors
本文关键字:构造函数 javascript 更新时间:2023-09-26
除了解析构造函数之外,这两者之间还有什么区别吗?
var Person = function(living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function() {
return this.gender;
};
};
var Person = function Person(living, age, gender) {
this.living = living;
this.age = age;
this.gender = gender;
this.getGender = function() {
return this.gender;
};
};
都可以使用
调用var p = new Person("Yes",25,"Male");
第一个解析为function(),而后者解析为person(),但我想知道使用其中一个是否比使用另一个有任何优势
它们对于您所说的目的是相同的。
唯一不同的是,在第二个函数内部,你有一个从函数本身到函数的干净引用。
正式语言规范声明:
FunctionExpression:
函数标识符(opt) (FormalParameterListopt) {FunctionBody}
函数表达式中的标识符(本例中为Person
)是可选的
这样做的原因将在稍后的语言规范中解释:
在实践中FunctionExpression中的Identifier可以从在FunctionExpression的FunctionBody中允许函数递归地调用自身。然而,与函数声明不同的是,FunctionExpression中的标识符不能被引用不能影响FunctionExpression的作用域。
在以下两种情况下可以使用第二个选项:
当它使你的代码更容易理解时:
(function removeBodyDivs(){
//does logic removing
//divs from the body
})();
可以比
更容易理解 (function (){
//does logic removing
//divs from the body
})();
在进行递归时,例如
var f = function fib(n){
return n<2?2:(fib(n-1)+fib(n-2));
}
相关文章:
- javascript中对象构造函数中的var属性与this.properties
- 如果在构造函数中有“返回”,则在 JavaScript 中的新运算符中做了什么
- 文本表示法VS.构造函数,用于在JavaScript中创建对象
- Javascript:为什么是构造函数's __proto__属性Empty(){}
- Chrome Javascript日期构造函数错误
- 如果在构造函数内部为else,则Javascript是可选的
- 是否可以测试javascript函数是否是构造函数
- JavaScript模块模式-如何在使用对象/函数之前激发构造函数/init函数
- JavaScript可以'无法通过SharedWorker()构造函数
- Javascript:继承原型而不重新定义构造函数
- Javascript - 如何向对象构造函数添加属性
- 从类构造函数继承javascript
- 创建构造函数的构造函数 (JavaScript)
- 在构造函数 JavaScript 中将属性设置为函数
- 使用不同的构造函数 JavaScript 循环遍历相同类型的对象
- 为构造函数(JavaScript)模拟apply()
- 异步构造函数Javascript
- IE11不能很好地使用Blob构造函数&javascript数组
- 构造函数 - JavaScript
- 如何在函数构造函数 javascript 中访问属性