JavaScript的原型模式

我的理解

今天重新看了下高程的面向对象设计那一章(重点是看了原型模式),下面有三种创建对象的方法:

1.工厂模式:

function createObj(name, usefor) {
    var obj = new Object();
    o.name = name;
    o.usefor = usefor;
    o.sayName = function() {
        console.log(this.name)
    }
    return o;
}
var book1 = createObj('高程', '催眠')

2.构造函数模式

function Obj(name, usefor) {
    this.name = name;
    this.usefor = usefor;
    this.sayName = function() {
        console.log(this.name)
    }
}
var book1 = new Obj('高程', '催眠')
var book2 = new Obj('高程1', '催眠1')

3.原型模式

function Obj(name, usefor) {
}
Obj.prototype.name = "高程";
Obj.prototype.usefor= "催眠";
Obj.prototype.sayName= function() {
        console.log(this.name)
    };
var book1 = new Obj()

1.工厂模式的缺点是:我们每次都要new Object出来,最后book1的对象类型就只有Object,也就是我们无法进行对象的识别;
2.构造函数:虽然构造函数能让我们知道Book1的的对象类型是Obj,当是其也有缺点,其缺点就是我们用这种方式创建出来的实例,他们的中的函数是不一致的,因为他们属于不同的作用域链和标识符;可以用下面例子做证明

console.log(book1.sayName == book2.sayName);

上面返回的是false;创建两个相同作用的函数是没有必要的,所以提在这里;
3.原型模式:我们创建的每个函数都有prototype属性的,而这个属性指的是一个对象,我们使用Obj.prototype.fn = function(){console.log(‘很晚了先睡觉’)}
这是相当于为prototype这个对象增加属性,而且这个属性能被所有由这个函数创建的实例给共享。所以当我们创建两个实例时,并没有创建两个作用相同的fn函数,两个实例用的还是Obj.prototype的fn。

上面可能有些说的不是很好,如果有不懂的可以在留言,大家一起研究研究,一起进步。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值