构造函数模式
//构造函数模式
function Dog(name,color) {
this.name = name;
this.color = color;
this.type = "犬科动物";
this.eat = function() {
console.log(this.color+"色的小狗"+this.name+"在吃东西。");
}
}
var dog1 = new Dog("贝贝","黑");
var dog2 = new Dog("兜兜","黄");
console.log(dog1.type); //犬科动物
dog2.eat(); //黄色的小狗兜兜在吃东西。
console.log(dog1.type==dog2.type); //true,值比较,所以相等
console.log(dog1.eat==dog2.eat); //false,因函数不是同一个引用地址
构造函数生成的每个实例都会重新生成一模一样的内容对象
优点:语法简单直观,便于调用函数内私有变量
缺点:多占用内存,降低效率
Prototype模式
//Prototype模式
function Dog_Proto(name,color) {
this.name = name;
this.color = color;
}
Dog_Proto.prototype.type = "犬科动物";
Dog_Proto.prototype.eat = function() {
console.log(this.color+"色的小狗"+this.name+"在吃东西。");
}
var dog_p1 = new Dog_Proto("贝贝","黑");
var dog_p2 = new Dog_Proto("兜兜","黄");
console.log(dog_p1.type);//犬科动物
dog_p2.eat();//黄色的小狗兜兜在吃东西。
console.log(dog_p1.type==dog_p2.type); //true
console.log(dog_p1.eat==dog_p2.eat); //true,指向同一个内存地址,所以相等
console.log(dog_p1.__proto__ == dog_p2.__proto__); //true;
Prototype模式下的实例对象会共享同一个原型对象,所有实例的type属性和eat()方法,都是指向通一个内存地址,
_proto_
属性指向同一个Object对象
优点:实例共享原型对象,节省内存
缺点:语法复杂,不直观
网友评论