JavaScript对象浅谈
来源:互联网 发布:图像虚化处理算法 编辑:程序博客网 时间:2024/04/29 17:24
JavaScript这门语言学了很久了,但都是断断续续的,很快就会忘记以前学过的,所以今天决定把其记到博客上来。
JavaScript对象
JavaScript的对象定义为“属性的无序集合,每个属性存放一个原始值、对象或函数。这意味着对象是无特定顺序的值的数组。在ECMAScript中,对象由特性(Attribute)构成,特性可以是原始值,也可以是引用值。如果特性存放的是函数,它将被看作对象的方法(Method),否则该特性被看作属性(Property)。
对象的废除
和Java一样,JavaScript中不用的对象会被回收机制自动回收,避免内存浪费
对象的类型
在JavaScript中一共有三种对象,内置对象(build-in object),本地对象(native object),宿主对象(host object)
定义类或对象
1. 工厂方式
Function createCar(color, door, mpg) { var car = new Object(); car.color = "red"; car.door = 4; car.mpg = 23; car.showColor = function() { alert(this.color); } return car;}定义之后就可以使用如下方式创建对象和访问方法了:
var car1 = createCar("red", 2, 20);var car2 = createCar("black", 4, 20);car2.showColor();这里有个问题,即每次通过这种方式创建对象的时候,都会创建一个新对象并且为每一个新的对象都创建一个showColor的方法,但是方法里面的内容却都一样,每创建一个对象就会创建相同的方法函数对象,占用大量内存,这样就推出了第二种创建对象的方式。
2. 原型方式
Function Car(){}Car.prototype.color="red";Car.prototype.doors=4;Car.prototype.mpg=23;Car.prototype.showColor=function(){alert(this.color)};Var oCar1=new Car();Var oCar2=new Car();这种方式利用了JavaScript的prototype属性,用空构造函数来设置类名。这样,每次创建出来的对象不会有相同的属性和方法,而是写在对象的prototype里面,不会占用重复内存。其中,Function Car(){}相当于class Car(){},然而这种方式也有一个缺点,即每次新创建出来的对象的值互相通用,例如:
Function Car(){}Car.prototype.color="red";Car.prototype.doors=4;Car.prototype.mpg=23;Car.prototype.drivers=new Array("Mike","Sue");Car.prototype.showColor=function(){alert(this.color)};Var oCar1=new Car();Var oCar2=new Car();oCar1.drivers.push("Matt");alert(oCar1.drivers); // 输出"Mike,Sue,Matt"alert(oCar2.drivers); // 输出"Mike,Sue,Matt"
3. 混合方式
即用构造方式创建对象所有的非函数属性,用原型的方式定义对象的函数属性(方法)。结果就是所有对象里面的函数都只创建一次。
Function Car(sColor,iDoors,iMpg) { this.color= sColor; this.doors= iDoors; this.mpg= iMpg; Car.drivers=new Array("Mike","Sue");}Car.prototype.showColor=function(){alert(this.color)};Var oCar1=new Car("red",4,23);Var oCar2=new Car("blue",3,25);oCar1.drivers.push("Matt");alert(oCar1.drivers); // 输出"Mike,Sue,Matt"alert(oCar2.drivers); // 输出"Mike,Sue"
4. 动态原型方式
function Animal(name){ this .name = name; if ( typeof Animal._initialized == 'undefined'){ Animal.prototype.introduceSelf = function (){ window.alert( " I am a " + this .name + " ! " ); }; Animal._initialized = true ; }}这里表示,如果Animal还没有被初始化过,就创建它的属性和一个原型方法。其中_initialized是Animal的全局私有属性(在JavaScript中并不存在私有属性的概念,所有属性都是共用的,但为了区分其与其他属性的不同,固在前边加上”_")
- 浅谈javascript对象
- JavaScript对象浅谈
- JavaScript Prototype对象浅谈
- 浅谈javascript面向对象
- 浅谈javascript面向对象
- 浅谈JavaScript面向对象
- javascript 对象浅谈
- 浅谈JavaScript的Array对象
- 浅谈javascript面向对象编程
- 浅谈Javascript面向对象编程
- 浅谈Javascript面向对象编程
- JavaScript 面向对象编程浅谈
- 【javascript】浅谈javascript中的对象和类型
- 浅谈Javascript中面向对象之对象
- 浅谈Javascript中Promise对象的实现
- 浅谈JavaScript的arguments和this对象
- 浅谈Javascript中Promise对象的实现
- 浅谈JavaScript new对象的四个过程
- Unix vim命令详解
- 一个无重复面值的找零算法的思路与实现(二)
- vb 6.0下面窗口Form的Picture属性不能更改问题
- 6、 java 输入一个数字组成的数组,输出该数组的最大值和最小值
- ios6下画面旋转的问题
- JavaScript对象浅谈
- iOS项目开发经验:【常用代码4】
- 输出所有的字符组合(可重复)
- 100盏灯泡的亮灭
- Google面试题:找几百亿数据的中值
- 括号匹配(小中大括号序列)
- 健康作息时间
- 7、 java 编写程序获取已知文件的扩展名. 注意: abc.txt的扩展名是txt, abc.java.txt的扩展名也是txt.
- tcp 报文格式