美文网首页
对象的创建方法以及优缺点

对象的创建方法以及优缺点

作者: Amuer蘃 | 来源:发表于2019-11-10 20:19 被阅读0次
1、原型模式
 var o = new Object();
 o.name = name;
 o.age = age;
 o.sayName = function() {
  console.log(this.name);
 };
 return o;
}
 
var person1 = createPerson("Nicholas", 29);
var person2 = createPerson("Greg", 27);

优点:能够解决创建多个对象的问题,兼容各个浏览器
缺点:没有解决对象识别的问题,不能知道一个对象的类型

2、构造函数模式

这种模式主要通过创建自定义的构造函数,从而定义自定义对象类型的属性和方法

 this.name = name;
 this.age = age;
 this.sayName = function() {
  console.log(this.name);
 }
}
var person1 = new Person("Nicholas", 29);
var person2 = new Person("Greg", 27);
优点:可以创建多个对象,解决对象的识别问题
缺点:每个实例都会创建不同的function实例,而其实创建完成同样任务的function实例是很没有必要的
    使用构造函数模式可以解决对象的识别问题,而这也是工厂模式无法办到的
构造函数需要以一个大写字母开头,而非构造函数应该以一个小写字母开头,这个主要是为了区别构造函数和其它函数,构造函数其实本身也是函数,只是用来创建对象而已
#####3、工厂模式
function Person() {
}
 
Person.prototype.name = "Nicholas";
Person.prototype.age = 29;
Person.prototype.sayName = function() {
 console.log(this.name);
}
 
var person1 = new Person();
var person2 = new Person();
person1.sayName(); // Nicholas
person2.sayName(); // Nicholas
优点:不用为构造函数传递参数,可以创建多个相同的对象
    缺点:原型中的属性被很多实例共享,当属性为包含引用类型值的属性时,修改一个实例中属性的值,另一个实例中的属性的值也会改变
4、组合式
function Person(name, age) {
 this.name = name;
 this.age = age;
}
 
Person.prototype = {
 constructor: Person,
 sayName: function() {
  console.log(this.name);
 }
}
 
var person1 = new Person("Nicholas", 29);
var person2 = new Person("Greg", 27);
 
person1.sayName(); // Nicholas
person2.sayName(); // Greg
person1.sayName === person2.sayName; // true
使用这种模式创建对象,每个实例都会有自己的一份实例属性的副本,但同时又共享着对方法的引用,最大限度地节省了内存,另外,这种混成模式还支持向构造函数传递参数,可谓是集两种模式之长 

相关文章

网友评论

      本文标题:对象的创建方法以及优缺点

      本文链接:https://www.haomeiwen.com/subject/wgwabctx.html