目前我们的方法是在构造函数内部创建的,也就是构造函数每执行一次就会创建一个新的getName方法
也是所有实例的getName都是唯一的
这样就导致了构造函数执行一次就会创建一个新的方法
执行1000次就会创建1000个新的方法,而1000个方法都是一摸一样的
这是完全没有必要的,完全可以使所有的对象共享同一个对象


基本写法

  1. function Fun(name,age){
  2. this.name = name;
  3. this.age = age;
  4. this.getName = function(){
  5. return this.name
  6. }
  7. }
  8. var obj1 = new Fun("孙悟空",18);
  9. console.log(obj1.getName()); // 孙悟空
  10. // 判断是否是同一个对象
  11. console.log(obj1.getName == obj2.getName); // false

改进写法

  1. function Fun(name, age) {
  2. this.name = name;
  3. this.age = age;
  4. this.getName = fun;
  5. }
  6. // 将方法写到全局作用域中
  7. function fun() {
  8. return this.name;
  9. }
  10. var obj1 = new Fun("孙悟空", 18);
  11. console.log(obj1.getName());
  12. var obj2 = new Fun("猪八戒",38);
  13. console.log(obj2.name);
  14. console.log(obj1.getName == obj2.getName);
  15. // 判断是否是同一个对象
  16. console.log(obj1.getName == obj2.getName); // true