js创建对象

1、 工厂模式
function createPerson(name,age,job){
var o = new Object();
o.name=name;
o.age=age;
o.job=job;
o.sayName=sayName;
return o;
}

function sayName(){
    alert(this.name);
}

2 构造模式
function Person(name,age,job){
this.name=name;
this.age=age;
this.job=job;
this.sayName=sayName;
}
根据OO原则,函数首字母大写。
要创建Person必须使用new,该种方式能够将实例标识成一个特定的类型,例如
var person1 = new Person();
alert(person1 instranceof Person); true,
任何用new操作符来调用的函数,均可作为构造函数。
3 原型模式
我们创建的每个函数都有一个protptype属性,该属性是一个指针,指向一个对象
function Person(){} //构造函数什么都没,如果有为实例属性或者实例方法

    Person.prototype.name='wang';   //原型属性
    Person.prototype.age = 30;
    Person.prototype.sayName = function(){  //原型方法
        return this.name+' '+this.age;
    };


    var p1 = new Person();
    var p2 = new Person();
    alert(p1.sayName==p2.sayName);
原型模式执行流程:
1、先查找构造函数的实例属性或者方法,如果有立即返回
2、如果构造函数里面没有,在原型对象里面查找。

delete p1.name删除属性

hasOwnProperty()判断在实例中是否存在指定属性
‘name’ in p1 //不管实例或者原型中只要存在,返回true
原型模式,所有初始化值是一致的,这也是原型模式的最大优点,共享。
4、原型与共享模式
不共享的部分使用构造方式,共享部分使用原型模式
function Person(name,age){
this.name=name,
this.age=age;
} //构造函数什么都没,如果有为实例属性或者实例方法

    Person.prototype = {
        constructor: Person,
        sayName:function(){
            return this.name+this.age;
        }
    }

    alert(new Person('wangg',29).sayName());
此种方式解决了传参和共享的问题

5、动态原型模式
function Person(name,age){
this.name=name,
this.age=age;
this.family=[‘秋鸣’,’旺琴’];

    //原型的初始化只要第一次执行就ok,不需要每次
    if (typeof this.sayName!='function') {
        Person.prototype.sayName = function(){
            alert(this.family);
            return this.name+this.age;
        }
    }
}   //构造函数什么都没,如果有为实例属性或者实例方法
alert(new Person('test1',29).sayName());
alert(new Person('test2',29).sayName());
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值