javascript的创建对象
来源:互联网 发布:js中格式化日期为date 编辑:程序博客网 时间:2024/05/17 02:46
创建对象
ECMAScript 拥有很多创建对象或类的方法,包括:
* 原始方式
* 工厂方式
* 构造函数方式
* 原型方式
* 混合的构造函数/原型方式
* 动态原型方法
* 混合工厂方式
创建对象详细介绍
采用哪种方式
目前使用最广泛的是混合的构造函数/原型方式和动态原型方法。可以采用这两种方式中的任何一种。不过不要单独使用经典的构造函数或原型方式,因为这样会给代码引入问题。
混合的构造函数/原型方式
联合使用构造函数和原型方式,就可像用其他程序设计语言一样创建对象。这种概念非常简单,即用构造函数定义实例属性,用原型方式定义实例的函数属性(方法)和共享的属性。结果是,每个对象实例都具有自己的一份实例属性的副本,共享属性和所有函数都只创建一次,节省了内存。
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John");}Car.prototype = { constructor: Car, showColor: function(){ alert(this.color); }};var oCar1 = new Car("red",4,23);var oCar2 = new Car("blue",3,25);oCar1.drivers.push("Bill");alert(oCar1.drivers); //输出 "Mike,John,Bill"alert(oCar2.drivers); //输出 "Mike,John"
以上代码,实例属性都在构造函数中创建。而由所有实例共享的属性和方法则是在原型中定义的。 而修改了 oCar1 的 drivers ,不会影响到 oCar2 的drivers,因为她们分别引用了不同的数组。因为使用了原型方式,所以仍然能利用 instanceof 运算符来判断对象的类型。
这种方式是 ECMAScript 采用的主要方式,它具有其他方式的特性,却没有他们的副作用。
动态原型方法
动态原型方法的基本想法与混合的构造函数/原型方式相同,即在构造函数内定义非函数属性,而函数属性则利用原型属性定义。唯一的区别是赋予对象方法的位置。
function Car(sColor,iDoors,iMpg) { this.color = sColor; this.doors = iDoors; this.mpg = iMpg; this.drivers = new Array("Mike","John"); if (typeof this.showColor != "function") { Car.prototype.showColor = function() { alert(this.color); }; }}
直到检查 this.showColor 是否不等于 “function” 之前,这个构造函数都未发生变化。这行代码是动态原型方法中最重要的部分。只在showColor方法不存在的情况下,才会将它添加到原型中。这段代码只会在初次调用构造函数时才会执行。此后,原型已经完成初始化,不需要再做什么修改了。 其中,if语句检查的可以是初始化之后应该存在的任何属性或方法—不必用一大堆if语句检查每个属性和方法,只要检查其中一个即可。也可以使用instanceof 运算符来判断对象的类型。
- JavaScript对象的创建
- JavaScript对象的创建
- javascript对象的创建
- javascript对象的创建
- javascript 对象的创建
- javascript 对象的创建
- Javascript对象的创建
- JavaScript 对象的创建
- JavaScript对象的创建
- JavaScript 对象的创建
- javascript的创建对象
- javaScript对象的创建
- 创建你自己的 JavaScript 对象创建你自己的 JavaScript 对象
- JavaScript 创建自己的对象
- JavaScript创建对象的语法
- JavaScript 创建对象的方式
- JavaScript中对象的创建
- JavaScript创建对象的区分
- 数据插入批量js-sailjs
- Debian Linux 下 VPS 的 Apache2 配置 和 SS搭建
- javascript的prototype
- Mysql优化与索引总分析【图解】
- Qt源码编译configure配置参数
- javascript的创建对象
- 【Java并发】JAVA并发编程实战-读书笔记20
- QSettings注册表的第二种用法
- EffectiveJava读书笔记 第10章 并发
- Intel MKL FATAL ERROR: Cannot load libmkl_avx.so or libmkl_def.so 错误解决方法
- javascript的继承实现
- 一个简易计算器
- oracle客户端plsql,sql语句查询的结果列表自动刷新功能
- leetcode---Combination Sum III---回溯