JS构造函数的运行顺序
Running order of JS constructor
关于JS构造函数的一个问题:
var hm = {};
new function(name){
hm[name] = this;
}("hello")
谁能给我一些关于这个构造函数如何运行的解释(比如哪个部分先运行)
首先var hm
成为一个对象,然后调用一个new
匿名function
,("hello")
传递到name
参数中。这里要了解的重要一点是,当您看到函数名称或匿名函数后带有或不带有任何参数的()
时,它会调用该函数。在这种情况下,new
关键字和函数内部存在 this
属性的事实使其成为构造函数。 构造函数内部的hm
基于 name
参数创建一个属性,并将new
实例本身分配给 hm[name]
,因为this
引用每个new
实例。最终结果是hm.hello
或hm['hello']
现在引用new
实例。当然,所有代码都按照标准的操作顺序从上到下运行,例如分配前的字符串解析。另外,请注意,这不起作用:
func('wow');
var func = function(x){
console.log(x);
}
这将起作用:
func('wow');
function func(x){
console.log(x);
}
如果你完全不了解构造函数,你应该知道使用了构造函数,所以你可以拥有类似对象的多个实例。例如:
function Person(last, first, middle){
this.lastName = last; this.firstName = first; this.middleName = middle;
this.said = this.ate = '';
this.saySomething = function(anything){
this.said = anything;
return this;
}
this.eatSomething = function(food){
this.ate = food;
return this;
}
this.didWhat = function(){
var m = this.middleName ? ' '+this.middleName : '';
var n = this.firstName+m+' '+this.lastName;
if(this.said){
n += ' said, "'+this.said+'"';
n += this.ate ? ', and' : '.';
}
if(this.ate){
n += ' ate '+this.ate+'.';
}
return n;
}
}
var Bob = new Person('Small', 'Bob', 'Richard');
Bob.saySomething('This programming stuff is pretty cool.').eatSomething('Some Vegan Food');
console.log(Bob.didWhat());
var Sally = new Person('Jones', 'Sally');
Sally.saySomething("It just takes time, but you'll get it.");
console.log(Sally.didWhat());
请记住,关键字 this
是指实例本身。在上面的示例中,我通过调用Person
的new
实例创建了Bob
和Sally
对象。通过在构造函数方法中返回this
,您可以链接方法,因为执行方法的结果是实例本身。
请注意,
Bob.saySomething('This programming stuff is pretty cool.').eatSomething('Some Vegan Food');
与
Bob.saySomething('This programming stuff is pretty cool.');
Bob.eatSomething('Some Vegan Food');
因为,就.eatSomething()
而言,Bob
和this
是同义词。
如果您只想访问某个属性,则如下所示:
console.log(Bob.said);
console.log(Bob.lastName);
Bob.said = "Now you're getting it.";
console.log(Bob.didWhat());
相关文章:
- 如何按顺序运行gullow任务
- 使函数按顺序运行[Node JS]
- 如何按特定顺序运行 Gulp 任务
- 为什么 then() 链式方法不按顺序运行
- 如何使用参数按顺序运行三个任务
- 如何按顺序运行一系列回调函数
- 如何将嵌套承诺与Q连锁?我可以'Don’我不能让它们按正确的顺序运行
- Jquery焦点(in|out)以奇怪的顺序运行
- 按顺序运行Js代码
- 节点.js MYSQL,在前一个查询完成后按顺序运行每个查询
- 如何使用 javascript 按顺序运行数字语句
- 在Phonegap应用程序中按顺序运行函数
- Javascript 未按顺序运行
- 吞噬未按顺序运行的任务
- 如何按时间顺序运行摩卡测试
- 在Laravel Elixir中创建一个任务,以指定的顺序运行Gulp任务
- 如何在Javascript中使用Q顺序运行promise
- 按特定顺序运行具有效果的jQuery函数
- 如何按顺序运行两个长生不老药任务
- 用Ajax调用顺序运行两个函数