创建对象方式

基本模式

var people = new Object();
people.name='Nancy';
people.age = 20;
people.say = function(){
    return ('hello!');
}
console.log(people.name,people.age,people.say());

优点:简单易学

缺点:复用性差,每一个都得自己创建

工厂模式

function creatObject(name, age){
    var people  = new Object();
    people.name = name;
    people.age  = age;
    people.say  = function(){
        return ('hello');
    }
    return people;//记住return
}
var p1 = creatObject('Nancy', 20);
var p2 = creatObject('Lucky', 20);
console.log(p1.name,p1.age,p1.say());
console.log(p2.name,p2.age,p2.say());

优点:能够调用一个函数就不断创建对象。

缺点:对象都有相同的say函数,在控制台测试p1.say===p2.say是返回false,这说明它们虽然是相同的函数,但它们是分别存储在不同的地址中,这就会造成资源浪费。

构造函数

function creat(name,age){
    this.name=name;//注意:这里用的是this
    this.age =age;
    this.say =function(){
        console.log('hello');
    }
}
var p3 = new creat('Nancy', 20);
var p4 = new creat('Lucky', 20);
console.log(p3.name,p3.age);
console.log(p4.name,p4.age);

优点:能够不断重复的创建对象,并且能够体现出原型对象和实例对象之间的关系p3 instanceof creat

缺点:每个对象中都有say函数,在控制台测试p3.say===p4.say是返回false,这说明它们还是没有实现共享函数,从而造成资源的浪费。

原型对象


function people(){};
people.prototype.name = 'Nancy';//直接在原型上增加属性
people.prototype.age  = 20;
people.prototype.say  = function(){
    return('hello!');//直接在原型上增加方法
};
var p3 = new people();
console.log(p3.name + "  " +p3.age+"  "+p3.say());
var p4 = new people();
console.log(p4.name + "  " +p4.age+"  "+p4.say());

优点:能够共享函数,属性等。p3.say===p4.say返回true,说明是同一个地址。

缺点:构造函数时没有参数,所以创建对象有点麻烦。当多个实例对象共享时,可能会发生一些问题。

构造函数和原型模式混合

function people(name,age){
this.name=name;
this.age =age;
}
people.prototype.say=function(){
return 'hello';
};
var p1 = new people('Nancy',20);
console.log(p1.name,p1.age,p1.say());
var p2 = new people('Lucky',20);
console.log(p2.name,p2.age,p2.say());

这时候他们的say函数时共有的,因为他们都指向同一个原型,而且构造函数传入参数从而可以初始化具有自己的属性。

记录点滴,有错请帮忙纠正,嘻嘻~

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值