初识javascript自定义对象的七大方式

来源:互联网 发布:石榴算法 编辑:程序博客网 时间:2024/05/22 05:32
/**javascript的自定义对象   工厂模式、构造函数模式、原型方式、混合构造函数和原型方式、动态原型方式、混合工厂方式、JSON格式创建对象*//**1 工厂方式*///概念:先创建对象,再添加属性和方法// 问题:// 1.会重复生成函数// 2.不能通过构造函数传参来初始化值function createPerson() {    var personObj = new Object();    personObj.name="我是杨过";    personObj.say=function () {        alert("你好啊,"+this.name);    }    return personObj;}//使用var person1 = createPerson();person1.say();//解决构造函数传参的问题// 问题:// 1.会重复生成函数function createPerson(name) {    var person= new Object();    person.name=name;    person.say=function () {        alert("我是:"+this.name);    }    return person;}//使用var person11 = createPerson("so");person11.say();/**================================================================================================================*//**2 构造函数方式*///类名大写,无需new对象// 问题:会重复生成函数function Person(name) {    this.name=name;    this.say = function () {        alert("我是--"+this.name)    }}//使用var person = new Person("so");person.say();/**================================================================================================================*//**3、原型方式*///prototype、空构造函数,属性和方法分配给prototype属性、不会重复生成函数//问题:不能通过构造函数传参来初始化值function Person() {}Person.prototype.name="Jhone";Person.prototype.say=function () {    alert("I am "+this.name);}//使用var person = new Person();person.say();/**===========================================================================================================*//**4、混合构造函数和原型方式*///定义:构造函数初始化对象的属性,原型方式定义对象的方法//优势:函数在创建一次,同时每个对象都拥有自己的对象属性实例//问题:编码方式不够友好--有些属性定义在构造函数之内,而有些属性定义在构造函数之外,不太符合逻辑function Person(name) {    this.name=name;}Person.prototype.say=function () {    alert("我还是:"+this.name)}//使用var person = new Person("so");person.say();/**=======================================================================================================*//**5、动态原型方式*///解决编码友好的问题//解释:属性在构造函数中定义,方法在prototype上定义function Person(name) {    this.name=name;    if(typeof Person.initialized=="undefined"){        Person.prototype.say=function () {            alert("动态原型方式:"+this.name)        }        Person.initialized=true;    }}/**====================================================================================================*//**6、混合工厂方式*///哑构造函数、返回另一种对象类型的新的实例function Person() {    var oPerson = new Object();    oPerson.name="混合工厂";    oPerson.say=function () {        alert("我是"+this.name);    }    return oPerson;}//使用与工厂方式不同,可以使用new运算符var person = new Person();/**==========================================================================================*//**7、JSON格式创建对象*///可以说是工厂方式的一种快捷表示方法var personObj = {    name:"名字",    age:"23",    sex:"男",    tellAge:function () {        alert("i am old is"+this.age);    }}

0 0
原创粉丝点击