js 在声明对象的时候常用构造函数模式和原型模式组合的形式
构造函数模式每个实例生成的属性各不相同,但生成方法时每个方法都要在每个实例上重新创建一遍(如果该方法实现的功能是一样的(共享的方法),那么就增加了内存开销,[你也可以把共享的方法放在函数外面,那么这样就感觉函数的全局作用域有点名不副实了,因为它只服务于构造函数中的那一个部分,具体看例1]
刚好这个问题可以通过原型解决)
原型模式的优点是定义实例共享
的属性和方法
function Person(sex){
this.sex = sex;
}
Person.prototype = {
constructor: Person,
name: function(){
console.log("name")
},
age: function(){
this.name();
console.log("age")
}
};
var a = new Person();
a.age(); // name age
例1
function Person(sex){
this.sex = sex;
this.saySex = saySex;
// this.saySex = function (){console.log(this.sex)} 就等价于 this.saySex = new Function(console.log(this.sex));
}
//该函数只是为了实现Person实例中的某个功能,全局作用域中定义的函数只能被某个对象调用,有点名不副实,所以才提出原型
function saySex(){
console.log(this.sex)
}