目前我们的方法是在构造函数内部创建的,也就是构造函数每执行一次就会创建一个新的getName方法
也是所有实例的getName都是唯一的
这样就导致了构造函数执行一次就会创建一个新的方法
执行1000次就会创建1000个新的方法,而1000个方法都是一摸一样的
这是完全没有必要的,完全可以使所有的对象共享同一个对象
基本写法
function Fun(name,age){
this.name = name;
this.age = age;
this.getName = function(){
return this.name
}
}
var obj1 = new Fun("孙悟空",18);
console.log(obj1.getName()); // 孙悟空
// 判断是否是同一个对象
console.log(obj1.getName == obj2.getName); // false
改进写法
function Fun(name, age) {
this.name = name;
this.age = age;
this.getName = fun;
}
// 将方法写到全局作用域中
function fun() {
return this.name;
}
var obj1 = new Fun("孙悟空", 18);
console.log(obj1.getName());
var obj2 = new Fun("猪八戒",38);
console.log(obj2.name);
console.log(obj1.getName == obj2.getName);
// 判断是否是同一个对象
console.log(obj1.getName == obj2.getName); // true