创建对象的方法

字面量创建对象

var obj = {
  name: '小王',
  age: '26',
  gender: 'male'
}

工厂方法

function createPerson (name, age, gender) {
  var obj = new Object();
  obj.name = name;
  obj.age = age;
  obj.gender = gender;
  obj.sayName = function () {
    console.log(name);
  }
  return obj;
}

var person1 = createPerson('小王', 29, '男');
var person2 = createPerson('小沈', 24, '男');

构造函数

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gendr = gender;
  this.sayName = function () {
    console.log(this.name);
  }
}

var person1 = new Person('小王', 29, '男');
var person2 = new Person('小沈', 24, '男');

使用构造函数的缺点: 每次创建示例方法都需要重新创建一遍。这时候,改造下构造函数:


function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gendr = gender;
  this.sayName = sayName();
}

function sayName() {
  console.log(this.name);
}

现在我们共享了一个全局函数,避免了重复创建同一个函数,但是当构造函数需要很多函数,我们就需要创建很多全局函数,这样就毫无封装性可言。所以我们引入原型模式。

原型模式

function Person(name, age, gender) {
  this.name = name;
  this.age = age;
  this.gendr = gender;
}

Person.prototype.sayName = function () {
  console.log(this.name);
}

扩展

判断是否是原型属性

function hasPrototypeProperty(obj, pro) {
  return !obj.hasOwnProperty(pro) && (pro in obj);
}

你可能感兴趣的:(创建对象的方法)