推荐阅读:JavaScript书第6章
JavaScript对象是一束属性。每个属性都有一个名称和一个值。例如,下面是一个JavaScript对象,它包含关于咖啡馆菜单项的信息:
{名称:“金枪鱼三明治”,吃饭:“午餐”,价格:4.95}
不像其他面向对象语言,你必须从声明一个类开始,你可以动态地创建JavaScript对象:
let item = {name:"Tuna Melt",meal:"Lunch",price:4.95};
为了访问对象中的各个属性,我们使用通常的成员语法。
Total = Total + item.price;
您可以通过简单地为新属性名称赋值来向对象添加新属性。
item.description = “金枪鱼罐头和融化的奶酪”;
还可以通过delete语句从对象中删除属性。
删除item.meal;
除了保存数据值之外,对象中的属性还可以存储作用于该对象的方法。
这里有一个具体的例子。在这个例子中,我设置了一个简单的对象来表示一个矩形。矩形具有宽度和高度属性,以及一个可以计算并返回矩形对象面积的getArea方法。
let rect ={宽度:200,高度:300,getArea:()=>{返回宽度*高度;}};
要调用计算面积的方法,我们使用以下语法:
let area = rect.getArea();
方法可以通过使用属性名作为变量名来访问它们所附加的对象的属性。在这个例子中,getArea函数需要访问它所附加对象的宽度和高度属性,所以它只使用这些属性名来访问它需要的数据。
我在上面的例子中使用的将方法附加到对象上的技术对于单个对象来说很有效,但是如果我们处理多个相同类型的对象,那么实现起来就会很繁琐。例如,下面的代码设置了三个单独的矩形,并为每个矩形提供了一个getArea方法。
让矩形=[{宽度:100,高度:300,getArea:()=>{返回宽度*高度;}},{宽度:75,高度:200,getArea:()=>{返回宽度*高度;}},{宽度:200,高度:50,getArea:()=>{返回宽度*高度;}}];
为了消除定义方法时的冗余,我们可以使用以下方法:
Function area(){返回宽度*高度;}让矩形=[{宽度:100,高度:300,getArea:area},{宽度:75,高度:200,getArea:area},{宽度:200,高度:50,getArea:area}];
我们在这里建立的area函数被设计为作为方法附加到一个矩形对象上。这个函数只有在作为方法使用时才有意义,因为该函数使用的属性width和height只有在具有这些属性的矩形对象的上下文中才有意义。为了明确地说明宽度和高度是对象的属性,我们可以使用以下语法:
Function area(){返回this.width*this.height;}让矩形=[{宽度:100,高度:300,getArea:area},{宽度:75,高度:200,getArea:area},{宽度:200,高度:50,getArea:area}];
关键字this在方法的上下文中使用时,指的是该方法所附加的对象。area函数通过获取属于该对象的宽度属性和属于该对象的高度属性来计算所需的面积。