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 相关文章推荐
网站页面自动跳转实现方法PHP、JSP(上)
Aug 01 Javascript
jquery ajax学习笔记2 使用XMLHttpRequest对象的responseXML
Oct 16 Javascript
js模拟C#中List的简单实例
Mar 06 Javascript
jquery实现手机号码选号的方法
Jul 31 Javascript
轻松掌握JavaScript中的Math object数学对象
May 26 Javascript
jQuery中的一些常见方法小结(推荐)
Jun 13 Javascript
JavaScript学习小结之使用canvas画“哆啦A梦”时钟
Jul 24 Javascript
JavaScript 身份证号有效验证详解及实例代码
Oct 20 Javascript
简单的三步vuex入门
May 20 Javascript
layui的table中显示图片方法
Aug 17 Javascript
大转盘抽奖小程序版 转盘抽奖网页版
Apr 16 Javascript
js实现类似iphone的网页滑屏解锁功能示例【附源码下载】
Jun 10 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
基于PHP一些十分严重的缺陷详解
2013/06/03 PHP
discuz免激活同步登入代码修改方法(discuz同步登录)
2013/12/24 PHP
PHP使用GD库输出汉字的方法【测试可用】
2016/11/10 PHP
php UNIX时间戳用法详解
2017/02/16 PHP
PHPStorm2020.1永久激活及下载更新至2020(推荐)
2020/09/25 PHP
解决iframe的frameborder在chrome/ff/ie下的差异
2010/08/12 Javascript
JS无限极树形菜单,json格式、数组格式通用示例
2013/07/30 Javascript
jquery的attr方法禁用表单元素禁用输入内容
2014/06/23 Javascript
jQuery简单实现列表隐藏和显示效果示例
2016/09/12 Javascript
KnockoutJS 3.X API 第四章之事件event绑定
2016/10/10 Javascript
详谈js中window.location.search的用法和作用
2017/02/13 Javascript
JavaScript字符串检索字符的方法
2017/06/23 Javascript
React学习笔记之条件渲染(一)
2017/07/02 Javascript
Node.js使用gm拼装sprite图片
2017/07/04 Javascript
EasyUI的DataGrid每行数据添加操作按钮的实现代码
2017/08/22 Javascript
使用Angular CLI快速创建Angular项目的一些基本概念和写法小结
2018/04/22 Javascript
解决vue scoped scss 无效的问题
2020/09/04 Javascript
微信小程序实现单个或多个倒计时功能
2020/11/01 Javascript
[01:17]辉夜杯战队访谈宣传片—EHOME
2015/12/25 DOTA
使用python开发vim插件及心得分享
2014/11/04 Python
python使用win32com库播放mp3文件的方法
2015/05/30 Python
python检查URL是否正常访问的小技巧
2017/02/25 Python
Python中列表与元组的乘法操作示例
2018/02/10 Python
python爬取哈尔滨天气信息
2018/07/14 Python
python django model联合主键的例子
2019/08/06 Python
django 解决扩展自带User表遇到的问题
2020/05/14 Python
python进度条显示-tqmd模块的实现示例
2020/08/23 Python
吃透移动端 Html5 响应式布局
2019/12/16 HTML / CSS
关于赌博的检讨书
2014/01/24 职场文书
人力资源部经理的岗位职责
2014/03/04 职场文书
《鹬蚌相争》教学反思
2014/04/22 职场文书
加油口号大全
2014/06/13 职场文书
忠诚教育心得体会
2014/09/03 职场文书
先进工作者推荐材料
2014/12/23 职场文书
五星红旗迎风飘扬观后感
2015/06/17 职场文书
初级职称评定工作总结
2015/08/13 职场文书