创造对象

JS高级程序设计三6.2,本文仅作书签摘要用。

1、工厂模式

优:减少重复代码
缺:没办法判断对象类型

2、构造函数

constructor – 每个对象都有构造函数属性

与工厂模式区别

1、没有显示创建对象
2、属性方法赋值给this
3、无return

都是new做的事。

优缺点

缺:
1、每个方法在每个实例上都要重新创建一遍。不同实例上的同名函数实际上是不同的。
2、优化后的全局函数只能被某个对象调用。

3、原型模式

prototype – 每个函数都有的原型属性

实例共享属性和方法

Parent.prototype.isPrototypeof(son1);
Object.getPrototype(son1);
son1.hasOwnProperty('name');// in
是否可枚举:Object.getOwnPropertyNames()/Object.keys();// 都在实例上
是否在原型上:in/son1.hasOwnProperty('name');

重写原型链

var Parent = function (){};
var p1 = new Parent();
Parent.prototype = {
}
var P2 = new Parent();
p1 instanceof Parent; // false
p2 instanceof Parent; // true

最新原型对象
之前原型对象

constructor属性,以及该属性的[[enumerable]]特性

可在原生对象原型中使用

优缺点

缺点:共享属性中引用类型不方便

4、构造函数和原型模式

最多的方式

优缺点

优点

1、实例属性和共享属性,最大程度节省内存。
2、支持向构造函数传递参数。

5、动态原型模式

调用构造函数时执行,不能再使用对象字面量重写原型。

6、寄生构造函数模式

实现上同工厂模式

作用:在原生类型(如Array)上创建额外方法。

优缺点

缺点:无法通过instanceof 确定对象类型

function SetNewArray() {
    var newArray = new Array(); 
    newArray.sayHi = function () {
        console.info('say hi!');
    };
    return newArray;
}

var cc = new SetNewArray();

cc instanceof SetNewArray // false

7、稳妥构造函数模式

没有公共属性(只能通过方法访问属性),不使用this。

与寄生构造函数模式区别:不用new 调用构造函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值