码迷,mamicode.com
首页 > 编程语言 > 详细

javascript对象的几种创建方式整理

时间:2018-03-07 23:52:32      阅读:193      评论:0      收藏:0      [点我收藏+]

标签:屏蔽   保存   多个   对象   blog   nbsp   方法   on()   封装   

1.工厂模式

//工厂模式虽然解决了创建多个相似对象的问题,但却没有解决对象识别的问题(即怎样知道一个对象的类型)。

function createPerson(name,age,job){
  var o = new Object();
  o.name = name;
  o.age = age;
  o.job = job;
  o.sayName = function(){
    alert(this.name);
  };
  return o;
}
var person1 = createPerson(‘suga‘,29,‘singer‘);
var person2 = createPerson(‘bts‘,20,‘singer‘);
person1.sayName();
person2.sayName();

 

2.构造函数模式

function Person(name,age,job){
  this.name = name;
  this.age = age;
  this.job = job;
  this.sayName = function(){
    alert(this.name);
  };
}
var person1 = Person(‘suga‘,29,‘singer‘);
var person2 = Person(‘bts‘,20,‘singer‘);

 与工厂模式相比,具有以下特点:

  1. 没有显式创建对象;
  2. 直接将属性和方法赋给了this对象;
  3. 没有return语句;
  4. 要创建新实例,必须使用new操作符;(否则属性和方法将会被添加到window对象)
  5. 可以使用instanceof操作符检测对象类型

  构造函数的问题:

  构造函数内部的方法会被重复创建,不同实例内的同名函数是不相等的。可通过将方法移到构造函数外部解决这一问题,但面临新问题:封装性不好。

3.原型模式

function Person(){}
Person.prototype.name = "suga";
Person.prototype.age = 29;
Person.prototype.job = "singer";
Person.prototype.sayName = function() {
  alert(this.name);
}

var person1=new Person();
var person2=new Person();
person1.name="果果";
alert(person1.name); --来自实例
alert(person2.name); --来自原型
当为对象实例添加一个属性时,这个属性就会屏蔽原型对象中保存的同名属性。

javascript对象的几种创建方式整理

标签:屏蔽   保存   多个   对象   blog   nbsp   方法   on()   封装   

原文地址:https://www.cnblogs.com/suga/p/8525475.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!