js创建对象的几种常用方式小结(推荐)


Posted in Javascript onOctober 24, 2010

第一种模式:工厂方式

var lev=function(){ 
return "三水点靠木"; 
}; 
function Parent(){ 
var Child = new Object(); 
Child.name="脚本"; 
Child.age="4"; 
Child.lev=lev; 
return Child; 
}; 
var x = Parent(); 
alert(x.name); 
alert(x.lev());

说明:
1.在函数中定义对象,并定义对象的各种属性,,虽然属性可以为方法,但是建议将属性为方法的属性定义到函数之外,这样可以避免重复创建该方法
2.引用该对象的时候,这里使用的是 var x = Parent()而不是 var x = new Parent();因为后者会可能出现很多问题(前者也成为工厂经典方式,后者称之为混合工厂方式),不推荐使用new的方式使用该对象
3.在函数的最后返回该对象
4.不推荐使用这种方式创建对象,但应该了解
第二种模式:构造函数方式
var lev=function(){ 
return "三水点靠木"; 
}; 
function Parent(){ 
this.name="脚本"; 
this.age="30"; 
this.lev=lev; 
}; 
var x =new Parent(); 
alert(x.name); 
alert(x.lev());

说明:
1.与工厂方式相比,使用构造函数方式创建对象,无需再函数内部重建创建对象,而使用this指代,并而函数无需明确return
2.同工厂模式一样,虽然属性的值可以为方法,扔建议将该方法定义在函数之外
3..同样的,不推荐使用这种方式创建对象,但仍需要了解
第三种模式:原型模式
var lev=function(){ 
return "三水点靠木"; 
}; 
function Parent(){ }; 
Parent.prototype.name="李小龙"; 
Parent.prototype.age="30"; 
Parent.prototype.lev=lev; 
var x =new Parent(); 
alert(x.name); 
alert(x.lev());

说明:
1.函数中不对属性进行定义
2.利用prototype属性对属性进行定义
3.同样的,不推荐使用这样方式创建对象
第四种模式:混合的构造函数,原型方式(推荐)
function Parent(){ 
this.name="脚本"; 
this.age=4; 
}; 
Parent.prototype.lev=function(){ 
return this.name; 
};; 
var x =new Parent(); 
alert(x.lev());

说明:1.该模式是指混合搭配使用构造函数方式和原型方式
2.将所有属性不是方法的属性定义在函数中(构造函数方式)
将所有属性值为方法的属性利用prototype在函数之外定义(原型方式)
3.推荐使用这样方式创建对象,这样做有好处和为什么不单独使用构造函数方式和原型方式,由于篇幅问题这里不予讨论
第五种模式:动态原型方式
function Parent(){ 
this.name="脚本"; 
this.age=4; if(typeof Parent._lev=="undefined"){ 
Parent.prototype.lev=function(){ 
return this.name; 
} 
Parent._lev=true; 
} 
}; 
var x =new Parent(); 
alert(x.lev());

说明:
1.动态原型方式可以理解为混合构造函数,原型方式的一个特例
2.该模式中,属性为方法的属性直接在函数中进行了定义,但是因为
if(typeof Parent._lev=="undefined"){ Parent._lev=true;}

从而保证创建该对象的实例时,属性的方法不会被重复创建
3.,推荐使用这种模式
Javascript 相关文章推荐
JavaScript 申明函数的三种方法 每个函数就是一个对象(一)
Dec 04 Javascript
初窥JQuery(二)事件机制(2)
Dec 06 Javascript
让你的博客飘雪花超出屏幕依然看得见
Jan 04 Javascript
使用CoffeeScrip优美方式编写javascript代码
Oct 28 Javascript
jQuery+css实现的切换图片功能代码
Jan 27 Javascript
jQuery扩展实现text提示还能输入多少字节的方法
Nov 28 Javascript
easyui 中的datagrid跨页勾选问题的实现方法
Jan 18 Javascript
微信小程序实现带刻度尺滑块功能
Mar 29 Javascript
bootstrap动态调用select下拉框的实例代码
Aug 09 Javascript
vue+express+jwt持久化登录的方法
Jun 14 Javascript
浅谈Vue2.4.0 $attrs与inheritAttrs的具体使用
Mar 08 Javascript
vue实现动态表格提交参数动态生成控件的操作
Nov 09 Javascript
JavaScript arguments 多参传值函数
Oct 24 #Javascript
ExtJs事件机制基本代码模型和流程解析
Oct 24 #Javascript
JQuery EasyUI 对话框的使用方法
Oct 24 #Javascript
javascript textContent与innerText的异同分析
Oct 22 #Javascript
js各种验证文本框输入格式(正则表达式)
Oct 22 #Javascript
JavaScript学习点滴 call、apply的区别
Oct 22 #Javascript
Web 前端设计模式--Dom重构 提高显示性能
Oct 22 #Javascript
You might like
《超神学院》霸气归来, 天使彦上演维多利亚的秘密
2020/03/02 国漫
你可能不知道PHP get_meta_tags()函数
2014/05/12 PHP
Symfony模板的快捷变量用法实例
2016/03/17 PHP
PHP实现的获取文件mimes类型工具类示例
2018/04/08 PHP
Laravel实现短信注册的示例代码
2018/05/29 PHP
利用JS自动打开页面上链接的实现代码
2011/09/25 Javascript
浅析Prototype的模板类 Template
2011/12/07 Javascript
gridview生成时如何去掉style属性中的border-collapse
2014/09/30 Javascript
js鼠标滑过图片震动特效的方法
2015/02/17 Javascript
js实现同一个页面多个渐变效果的方法
2015/04/10 Javascript
jquery读写cookie操作实例分析
2015/12/24 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
Jquery组件easyUi实现手风琴(折叠面板)示例
2016/08/23 Javascript
微信小程序 合法域名校验出错详解及解决办法
2017/03/09 Javascript
教你如何编写Vue.js的单元测试的方法
2018/10/17 Javascript
CKEditor扩展插件:自动排版功能autoformat插件实现方法详解
2020/02/06 Javascript
功能完善的小程序日历组件的实现
2020/03/31 Javascript
Vue v-for中的 input 或 select的值发生改变时触发事件操作
2020/08/31 Javascript
[02:06]DOTA2英雄基础教程 暗影萨满
2013/12/16 DOTA
[02:43]DOTA2英雄基础教程 德鲁伊
2014/01/13 DOTA
Django使用Celery异步任务队列的使用
2018/03/13 Python
Python基于递归和非递归算法求两个数最大公约数、最小公倍数示例
2018/05/21 Python
python 处理telnet返回的More,以及get想要的那个参数方法
2019/02/14 Python
python自动化工具之pywinauto实例详解
2019/08/26 Python
python单例模式原理与创建方法实例分析
2019/10/26 Python
python爬取网易云音乐热歌榜实例代码
2020/08/07 Python
html5 乒乓球(碰撞检测)实例二
2013/07/25 HTML / CSS
德国baby-markt婴儿用品瑞士网站:baby-markt.ch
2017/06/09 全球购物
CHARLES & KEITH台湾官网:新加坡时尚品牌
2019/07/30 全球购物
请编写一个 C 函数,该函数在给定的内存区域搜索给定的字符,并返回该字符所在位置索引值
2014/09/15 面试题
父亲的菜园教学反思
2014/02/13 职场文书
中青班党性分析材料
2014/02/16 职场文书
工程造价专业求职信
2014/07/17 职场文书
离婚协议书范本及离婚须知
2014/10/15 职场文书
社会实践心得体会范文
2016/01/14 职场文书
golang的文件创建及读写操作
2022/04/14 Golang