博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js创建对象的几种常用方式
阅读量:7305 次
发布时间:2019-06-30

本文共 1794 字,大约阅读时间需要 5 分钟。

hot3.png

js创建对象的几种常用方式 博客分类: js
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.,推荐使用这种模式

转载于:https://my.oschina.net/xiaominmin/blog/1597828

你可能感兴趣的文章
苹果新规要求开发者必须遵守广告识别符规定
查看>>
Kubernetes1.7正式发布,优化了可扩展性,安全增强和网络通信策略
查看>>
Jennifer Null —— 导致计算机出错的名字
查看>>
01_MyBatis EHCache集成及所需jar包,ehcache.xml配置文件参数配置及mapper中的参数配置...
查看>>
《Adobe Premiere Pro CS6中文版经典教程》——1.4 Adobe Premiere Pro 界面概述
查看>>
6月22日云栖精选夜读:业界首个非侵入式热修复方案Sophix重磅推出,颠覆移动端传统更新流程!...
查看>>
《Android游戏编程入门经典》——4.4节对比模拟器和Android设备
查看>>
FreeDOS 如何维持 DOS 的生命力
查看>>
实行百度实名制后的seo优化该如何调整?
查看>>
《C语言编程魔法书:基于C11标准》——2.4 地址与字节对齐
查看>>
Ubuntu 14.04 LTS中的主要程序变化的总结
查看>>
《数据分析变革:大数据时代精准决策之道》一2.2 为大数据做好准备
查看>>
《R语言数据挖掘:实用项目解析》——第1章,第1.13节缺失值(NA)的处理
查看>>
《网站设计 开发 维护 推广 从入门到精通》——1.2 网页美工常用工具
查看>>
《JavaScript面向对象编程指南(第2版)》——1.3 分析现状
查看>>
《精通软件性能测试与LoadRunner最佳实战》—第2章2.4节性能测试用例
查看>>
Linux 上的鼠标 Hack 应用
查看>>
《R语言数据挖掘》——导读
查看>>
SCL项目:在Red Hat系列系统上安装同一软件的不同版本
查看>>
仅靠志愿者运营,大数据文摘20万粉丝,如何炼成?
查看>>