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 ),即真正创建一个对象的副本。若要实现深拷

 

 

posted @ 2022-05-06 14:40  曲中意  阅读(335)  评论(0)    收藏  举报