new 是用来调用一个构造函数的关键字
使用方法如下
function Person(name, age){
this.name = name
this.age = age
}
let p1 = new Person('han', 18) // Person{name: "han", age: 18}
如上代码,就使用函数生成了一个对象,这个函数的名称是构造函数,即为构造对象的函数,为了和其他的函数进行区别,在命名的时候会特意将它的首字母大写
可能你会觉得疑惑,明明上面的代码可以直接写成这样
var o = {
name: 'han',
age: 18
}
为什么要多次一举,要使用一个函数来生成对象?
答:玩过红警吗?里面有十几种兵种,每个兵种的功能都不一样,如果把一个小兵当成一个对象,如那么这个对象上有对象上有 小兵的编号、血量、兵种、输出、所属玩家、等级、位置信息等属性或方法,如果只有一个这样的小兵,那还是比较好写代码的,只需要写一个对象
如果有1000个小兵呢?是不是也要写1000个对象?
这个时候,构造函数的功能就体现出来了,因为我们只需要给一个函数传进去不同的参数、就可以得到不同的小兵,甚至可以直接用循环的方式直接生成想要的小兵的数量
这个时候构造函数的功能就体现出来了
那么,为什么使用 new 的时候,这个函数就可以生成一个对象了呢?
其实,不用new,也有别的办法生成对象
代码如下:
function Person(name, age){
var o = {}
o.name = name
o.age = age
return o
}
let p1 = Person('han', 18) // {name: "han", age: 18}
可以看到,结果几乎是一样的,只是对象前少了一个 Person(Person只是表示这个对象是由Person函数构造出来的),那么,就可以推测出new 的作用了——隐式的在函数内部加了2句代码
整体代码如下:
function Person(name, age){
// var this = {}
this.name = name
this.age = age
// return this
}
因为this是一个关键字,程序员直接对 this 赋值会报错
所以这个操作是JS引擎帮我们做的
使用new时,函数背部的 this 在运行时会变成生成的那个对象
网友评论