JavaScript中的几种模式
2016-02-02 11:33
567 查看
1.工厂模式
2.构造函数模式
但构造函数模式存在一个问题,由于在创造对象的时候,每一个新建的对象都是一个实例,这时候,每个方法都要在实例上重新创建一边,但由于这都是同样的一个方法,本质上来说我们希望的是同一个Function实例就可以解决的
原则上可以考虑以下的解决办法。
但对于封装性来说,sayName作为全局的调用只供Dog来使用,有违全局作用域的初衷,所以,我们可以考虑使用构造函数模式+原型链的模式来创建对象.
4.组合使用构造函数+原型的模式
此方法是使用最广泛的,认可度最高的
function createDog(name,age){ var d = new Object(); d.name = name; d.age = age; d.sayName = function(){ console.log(this.name); } return d; }
2.构造函数模式
function Dog(name,age){ this.name = name; this.age = age; this.sayName = function(){ console.log(this.name); }; } //下面看看几种使用方式 //当做构造函数使用 var d1 = new Dog("Sunli","28"); d1.sayName(); //当做普通函数调用 /*当在全局作用域中调用一个函时, *this 对象总是指向GLobal对象 *在浏览器中就是window对象 */ Dog("Sunli","28"); window.sayName(); //在另一个对象作用域中调用 var d = new Object(); Dog.call(d,"Sunli","28"); d.sayName();
但构造函数模式存在一个问题,由于在创造对象的时候,每一个新建的对象都是一个实例,这时候,每个方法都要在实例上重新创建一边,但由于这都是同样的一个方法,本质上来说我们希望的是同一个Function实例就可以解决的
原则上可以考虑以下的解决办法。
function Dog(name,age){ this.name = name; this.age = age; this.sayName = sayName; } var sayName = function(){ console.log(this.name); }
但对于封装性来说,sayName作为全局的调用只供Dog来使用,有违全局作用域的初衷,所以,我们可以考虑使用构造函数模式+原型链的模式来创建对象.
4.组合使用构造函数+原型的模式
function Dog(name,age){ this.name = name; this.age = age; } Dop.prototype = { constructor : Dog, sayName :function(){ console.log(this.name); } } var d = new Dog("sunli",'28'); d.sayName(); var d1 = new Dog("sunliabc",'28'); d1.sayName(); //sayName是所有实例都能共享的一个方法
此方法是使用最广泛的,认可度最高的
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- Python动态类型的学习---引用的理解
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享
- 如何创建对象以及jQuery中创建对象的方式