function Person(name, age, gender) {
this.name = name;
//这里的this代表的含义是,new出的对象(必须好好理解)
this.age = age;
this.gender = gender;
this.sayName = function() {
console.log(this.name);
}
}
以上这段代码实现了一个构造函数,其中有一个syaName()的方法,这个方法在每new出一个新对象之后都会开辟一段保存空间。这里其实可以做出优化,让所有的new出的对象访问同一个sayName()方法,达到节省空间的做用。
我们只需要将sayName()方法定义成一个全局变量,就可以达到优化的目的。看代码
function fun() {
console.log(this.name);
}
function Person(name, age, gender) {
this.name = name;
//这里的this代表的含义是,new出的对象(必须好好理解)
this.age = age;
this.gender = gender;
this.sayName = fun;
}
let per3 = new Person();
let per4 = new Person();
console.log(per3.sayName == per4.sayName);
输出的结果为:true
虽然达到了节省空间的作用,但是将函数定义在全局作用域中污染了全局作用域。此时可以将公用的内容定义在原型对象中。代码如下:
function Person(name, age, gender) {
this.name = name;
//这里的this代表的含义是,new出的对象(必须好好理解)
this.age = age;
this.gender = gender;
}
Person.prototype.sayName = function() {
console.log(this.name);
}
let per3 = new Person();
let per4 = new Person();
console.log(per3.sayName == per4.sayName);
输出结果:true