ECMAScript创建对象
来源:互联网 发布:2016农村金融数据报告 编辑:程序博客网 时间:2024/06/05 07:09
【创建一个对象】
创建对象且给该对象新建属相和方法
var box=new Object();box.name='lee';box.age=56;box.run=function(){ return this.name+this.age+'运行中...';};alert(box.run());
以上就新建了一个对象,但此时如果还想新建一个类似的对象,还需写如下代码
box1=box;box1.name='shuang';box1.age=18;box1.run=function(){ return this.name+this.age+'运行中...';};alert(box1.run());
如果我还想创建更多的类似于box对象的对象,还得重复上面的代码,不难发现,这样产生了大量的重复代码,且这样是引用类型,box1=box;box1得到的是box的引用,当box1重新赋值时,box的值也改变了,为解决此问题,引出第2中创建对象的方法
【工厂模式创建对象】
function createObject(name,age){ var obj=new Object(); obj.name=name; obj.age=age; obj.run=function(){ return obj.name+obj.age+'运行中...'; }; return obj;}
创建新对象
var box1=createObject('lee',18);var box2=createObject('shuang',22);
调用新对象的方法:
alert(box1.run());alert(box2.run());
由上面可以看出,工厂模式创建新对象时用的代码远远比第一种方法要少,所以工厂模式的
优点:解决了创建新对象时要写大量的重复代码
缺点:无法识别创建的哪个对象的实例
alert(box1 instanceof Object); //返回turealert(typeof box1); //返回object
由上面可得,只能知道box1是object类型,但不知道是具体的哪个对象,又为解决此问题,引出下面的方法
在此个人理解的工厂模式就是:先创建一个方法,该方法的作用是创建对象,且把方法的参数传递给方法里面创建的对象的属性或方法,且把该对象返回,当想创建多个类似的对象时,直接调用该方法传参,即可创建新对象
【构造函数创建对象】
function Box(name,age){ this.name=name; this.age=age; this.run=function() { return this.name+this.age+'运行中'; };}
构造函数创建实例对象的方法:
var box1=new Box('lee',20);var box2=new Box('shuang',18);
优点:
- 解决了重复实例化的问题
- 解决了对象识别的问题
alert(typeof box1); //返回objectalert(box1 instanceof Box); //返回true,由此可知道是实例化的BOX
构造函数的特点:
- 创建对象时必须使用new,否则就是普通函数调用,也是无效的
- 为与普通函数区别,构造函数名首字母大写
与工厂模式的区别:
- 没有使用new Object()创建对象,所以也没有retruen 对象语句
- 直接将属性和方法赋值给this对象
构造函数为什么能创建对象???
因为创建对象一般用new Object(),但构造函数又没有new Object(),那么问题来了,创建的对象从那里来的???执行过程时这样的:
1.当new 构造函数时,后台自动执行了new Object(),这时会将构造函数的作用域赋给新对象,也就是new Object()创建出来的对象,而构造函数体内的this就代表new Object()出来的对象,所以构造函数体内作用域必须写this ,写别的无效
2.执行构造函数内的代码
3.返回新对象(后台直接返回)
- ECMAScript创建对象
- ECMAScript 对象
- ECMAScript对象
- ECMAscript 对象 (javascript)
- ECMAScript的本地对象
- ECMAScript arguments 对象
- ECMAScript对象基础
- ECMAScript arguments 对象
- ECMAScript 对象类型
- ECMAScript 对象类型
- ECMAScript arguments 对象
- ECMAScript 对象作用域
- ECMAScript(JavaScript) 修改对象
- ECMAScript arguments 对象
- ECMAScript arguments 对象
- ECMAScript对象--整理
- ECMAScript面向对象
- ECMAScript-单体内置对象
- 今天搜并发看到的一些文章
- 第五周(1) Flag相关的功能设计
- python 确保windows下网络正常
- ios 判断字符串是否全部空格
- final关键字
- ECMAScript创建对象
- 百度地图集成的那些坑
- 17.6.1]Codeforces Round #417 (Div. 2)(T1-T3)
- nginx启动、重启、关闭
- yii2 activeform相关问题记录
- Spark 广播变量(broadcast)更新方法
- Uncaught Error: Bootstrap's JavaScript requires jQuery
- MySQL 水平拆分
- Linux中rz和sz命令的安装及使用