JS-创建对象

没完成大概先这样写下

字面量


var obj = {
  name = 'captain jack',
  hi = function(){
    console.log('hi');
  },
};

优点:方便直观
缺点:不能构成重用

new Object();

var obj = new Object();
obj.name = 'zhangsan';
obj.say = function(){
  console.log('I am zhangsan');
};

工厂方法


function createHuman(name,sex,age)
{
   var obj = new Object();
   obj.name = name;
   obj.sex = sex;
   obj.age = age;
   obj.introduceMe = function(){
     console.log('My name is ' + name);
     console.log('My sex is ' + sex);
     console.log('My age is ' + age);
  };
  return obj;
}

优点:屏蔽了细节,也实现了代码重用
缺点:你无法判断创建的类是啥类型的

js判断类型,可以用instanceof , typeof,待补充(wait to do)。

构造方法


function Human(name,sex,age)
{
   this.name = name;
   this.sex = sex;
   this.age = age;
   this.introduceMe = function(){
     console.log('My name is ' + name);
     console.log('My sex is ' + sex);
     console.log('My age is ' + age);
  };
}

优点:解决了上面工厂方法留下来的缺点,且具备他的优点
缺点:每个对象都有一个方法了,浪费内存。
构造方法的具体过程:
1.new的时候会创建一个对象
2.把对象赋给这个函数的作用域
3.返回对象

原型模式


原型模式主要是利用了每个构造函数拥有一个原型对象,且这个原型对象被每个根据此构造函数创建出来的对象中的某个属性所指着。具体的图,下次画出来(wait to do)。这样的话就可以实现,所有对象共享某个对象。

function Human(name,sex,age)
{
   this.name = name;
   this.sex = sex;
   this.age = age;
}
 Human.prototype.sayHi = function(){
     console.log('My name is ' + name);
     console.log('My sex is ' + sex);
     console.log('My age is ' + age);
 };

你可能感兴趣的:(JS-创建对象)