JavaScript中的几种模式

来源:互联网 发布:网络不停的掉线 编辑:程序博客网 时间:2024/06/16 09:28

1.工厂模式

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是所有实例都能共享的一个方法

此方法是使用最广泛的,认可度最高的

0 0