js中的对象
1.面向对象的概述
将同一类事物的操作代码封装成对象,将用到的变量和函数作为对象的属性和方法,然后通过对象去调用这样可以的属性和方法。然后通过对象去调用,这样可以使代码结构清晰,层次分明
2.面向对象的特征
1.封装性
2.继承性
3.多态性
3.对象属性
对象属性
(JavaScript 对象中的)名称:值对被称为属性。
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
| 属性 | 属性值 |
|---|---|
| firstName | Bill |
| lastName | Gates |
| age | 62 |
| eyeColor | blue |
对象方法
对象也可以有方法。
方法是在对象上执行的动作。
方法以函数定义被存储在属性中。
| 属性 | 属性值 |
|---|---|
| firstName | Bill |
| lastName | Gates |
| age | 62 |
| eyeColor | blue |
| fullName | function() {return this.firstName + " " + this.lastName;} |
方法是作为属性来存储的函数。
4.对象的定义
对象的定义是通过“{} ”语法来实现的 对象的成员以键值对的形式存放在{}中 多个成员用逗号隔开,
var o1={}; var o2={name:'Jon'}; var o3={name:'Jim',age:19,genter:'男'}
JavaScript 对象
真实生活中的对象、属性和方法
在真实生活中,汽车是一个对象。
汽车有诸如车重和颜色等属性,也有诸如启动和停止的方法:
| 对象 | 属性 | 方法 |
|---|---|---|
|
car.name = porsche car.model = 911 car.length = 4499mm car.color = white |
car.start() car.drive() car.brake() car.stop() |
所有汽车都拥有同样的属性,但属性值因车而异。
所有汽车都拥有相同的方法,但是方法会在不同时间被执行。
JavaScript 对象
您之前已经学到,JavaScript 变量是数据值的容器。
这段代码把一个单一值(porsche)赋给名为 car 的变量:
var car = "porsche";
对象也是变量。但是对象包含很多值。
这段代码把多个值(porsche, 911, white)赋给名为 car 的变量:
var car = {type:"porsche", model:"911", color:"white"};
值以名称:值对的方式来书写(名称和值由冒号分隔)。
JavaScript 对象是被命名值的容器。
对象属性
(JavaScript 对象中的)名称:值对被称为属性。
var person = {firstName:"Bill", lastName:"Gates", age:62, eyeColor:"blue"};
| 属性 | 属性值 |
|---|---|
| firstName | Bill |
| lastName | Gates |
| age | 62 |
| eyeColor | blue |
对象方法
对象也可以有方法。
方法是在对象上执行的动作。
方法以函数定义被存储在属性中。
| 属性 | 属性值 |
|---|---|
| firstName | Bill |
| lastName | Gates |
| age | 62 |
| eyeColor | blue |
| fullName | function() {return this.firstName + " " + this.lastName;} |
方法是作为属性来存储的函数。
实例
var person = {
firstName: "Bill",
lastName : "Gates",
id : 678,
fullName : function() {
return this.firstName + " " + this.lastName;
}
};
5.this 关键词
在函数定义中,this 引用该函数的“拥有者”。
在上面的例子中,this 指的是“拥有” fullName 函数的 person 对象。
换言之,this.firstName 的意思是 this 对象的 firstName 属性。
6.对象的访问
访问对象属性
您能够以两种方式访问属性:
objecName.propertyName
或者
objectName["propertyName
对象成员的遍历
var obj={name:'Tom',age:16}; for(var k in obj){ console.log(k+'-'+obj[k]); }
深拷贝与浅拷贝
拷贝(copy)是指将一个目标数据复制一份,形成两个个体。在前面的开发中,若将一个
基本数据类型(数值、字符型)的变量赋值给另一个变量,就可以得到两个值相同的变量,改变
其中一个变量的值,不会影响另一个变量的值。但是,如果操作的目标是引用数据类型(如数组、
对象),则会出现两个变量指向同一个对象的情况,如果改变其中一个对象的成员,另一个对象
也会发生改变。具体示例如下。
var p1={name:'Jim',age:19}; var p2=p1; p2.name='Tom'; console.log(p1) //输出结果。 Object {name:'Tom',age:19} console.log(p2) //输出结果。 Object {name:'Tom',age:19 console.log(p1===p2)
从运行结果可以看出,在将变量 p1 赋值给 p2 后,更改 p2 的成员,p1 的成员也会发生改
变。这种情况在 JavaScript 中称之为浅拷贝( shallow copy )。例如,将上述代码中的对象“{name:
'Jim, age: 19)”想象成一个文件夹,该文件夹中保存了 name 和 age 两个文件,而变量 p1 是链
接到这个文件夹的快捷方式。在执行“var p2 = p1;”操作时,是将快捷方式复制了一份,此时
两个快捷方式指向了同一个文件夹,而不是对文件夹进行复制操作。
在实际开发中,浅拷贝可以节省内存开销。因为一个对象可以保存大量的数据,其占用的内
存会比基本数据类型高。如果没有浅拷贝机制,在将对象作为函数参数传递时,函数内部的实参
就会创建对象的副本,多占用一份内存空间,尤其是进行函数嵌套调用或递归操作时,占用空间
会越来越多。
与浅拷贝相对的是深拷贝(deep copy ),即真正创建一个对象的副本。若要实现深拷
浙公网安备 33010602011771号