第八章——对象

因为JavaScript是一种基于原型的语言,所有JavaScript中对象的工作方式,与其他基于类的语言中的对象不同。JavaScript对象基本上是属性和值的集合,这在编程中称为哈希表(hash table)。其中的值可以是任意类型的数据,包括函数、数组和其他对象。可以使用对象从一处向另一处传递多个值(当使用JSON在JavaScript和另一门语言之间传递数据时,这是非常容易的,后面章节将对此进行讨论)

一.创建单一对象(单一对象用于特定目的,例如创建名值对,或创建不与其他对象共享代码的唯一对象)的方法:

①对象构造函数

var car=new Object();
car.seats="cloth";
car.engine="V-6";
car.show_features=function(){
    window.alert("car:"+car.seats+"seats,"+car.engine+"engine");
    };
car.show_features();

或者(先创造函数,然后将此函数赋值给对象的函数)

var car=new Object();
car.seats="cloth";
car.engine="V-6";
function my_alert(){
    window.alert("car:"+car.seats+"seats,"+car.engine+"engine");
    };
car.show_features=my_alert;
car.show_features();

②对象字面量表示法

var car={
    seats:"cloth",
    engine:"V-6", 
    show_features:function(){
        window.alert("car:"+car.seats+"seats,"+car.engine+"engine");
        }
}

二.访问属性值:

①圆点表示法:window.alert(car.seats);

②括号表示法:window.alert(car["seats"]);

当需要使用属性名但它被存储在变量中时,括号表示法的这个特性会非常有用。因为圆点表示法只允许使用基本的属性名称,不能使用变量值。

三.对象结构:当以特定的方式编写对象时,可以创建一个对象,将它作为其他对象的结构或者模型。

①构造函数,构造函数可以为对象创建可重用代码(注意函数名以大写字母(C)开头,这非必须,但有助于与其他类型的函数区分开来)

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

this.describe=function(){

document.write("This amazing car has these features:");

document.write(this.seats+"seats,"+this.engine+"engine,"+this.radio);

};

}

var car1=new Car("cloth","v-6","Tape Deck");

car1.describe();

在构造函数中添加方法这种方式非常直接,但对于对象的每个实例都会创建一个相同任务的函数方法,将会耗费时间和空间。看下面的方法:

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

this.describe=describe_car();

}

function describe_car(){

document.write("This amazing car has these features:");

document.write(this.seats+"seats,"+this.engine+"engine,"+this.radio);

}

不过,这种方法也有不利之处:现在该方法函数是全局,这样大量应该在Car结构的局部上下文之内的函数都出现在全局上下文中,从而使全局上下文变得混乱。为了解决这个问题,下面将学习使用原型。

四.使用原型:JavaScript中的每个函数都有prototype(原型)属性,该属性是一个对象,其中包含用该函数创建的每个对象实例都可以使用的属性和方法。对于共享的属性和方法,这种方式将使代码很容易就可以跨实例重用。

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

}

Car.prototype.locks="automatic";

var car1=new Car("cloths","V-6","Type Deck");

window.alert(car1.locks);//automatic

原理:在JavaScript中,调用对象的属性或方法将首先检查尝试使用它的对象。如果无法找到相应的属性或方法,并不会立刻放弃。相反,JavaScript将搜索对象原型来检查是否有匹配的值。实际上可向实例中添加与原型中的属性同名的属性,这将有效的隐藏该对象原型中的同名属性的值。

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

}

Car.prototype.locks="automatic";

var car1=new Car("cloths","V-6","Type Deck");

car1.locks="manual";

window.alert(car1.locks);//manual

五.hasOwnProperty()方法:

有时要确认在对象实例(不是原型)中是否存在某个属性。如果存在,该方法返回true,否则false;

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

}

Car.prototype.locks="automatic";

var car1=new Car("cloths","V-6","Type Deck");

var ca2=new Car("cloth","V-4","CD Changer");

car1.locks="manual";

window.alert(car1.locks);//manual

window.alert(car1.locks);//automatic

window.alert(car1.hasOwnProperty("locks");//true

window.alert(car2.hasOwnProperty("locks");//false

六.为方法使用原型:因为原型在对象的构造函数之外,并不在全局上下文中,因此它是添加方法函数的最佳位置,这些方法函数将在对象的每个实例之间共享。将对象每个实例的属性添加到构造函数中(如果它们具有唯一值),并将方法添加到原型中,以便在所有实例中共享。基于上面的原因,生成自定义对象有一种通用模式,被称为构造函数/原型结合模式。

function Car(seats,engine,radio){

this.seats=seats;

this.engine=engine;

this.radio=radio;

}

Car.prototype.describe=function(){

document.write("This amazing car has these features:");

document.write(this.seats+"seats,"+this.engine+"engine,"+this.radio);

}

var car1=new Car("cloth","V-6","Tape Deck");

car1.describe();

七.for-in:JavaScript允许使用for-in循环遍历对象的属性,以及使用with语句来轻松访问特定的对象。

for( var prop_name in car1){

document.write(prop_name+":"+car1[prop_name]+"<br>");

}

注意,该循环将显示所有的属性,包括对象原型中的属性。如果只希望使用对象实例中的属性,可以使用hasOwnProperty()方法来检查每个属性

for( var prop_name in car1){

if(car1.hasOwnProperty(prop_name)){

document.write(prop_name+":"+car1[prop_name]+"<br>");

}

}

②with语句:在with语句中可以直接使用对象的属性名来访问属性值。(通常不鼓励使用with,因为它存在性能问题,并且在使用它时,容易不小心对全局变量进行赋值或改写)

with(car1){

document.write("Seats:"+seats+"<br>");

document.write("Engine:"+engine+"<br>");

document.write("Radio:"+theradio);

}

八.两个预定义对象(这两个对象都是window对象的一部分,可以通过window.navigator.property访问其属性,但是也可以直接使用):

①导航对象navigator对象的属性:

appCodeName——浏览器的代码名称

appName——浏览器的全名

appVersion——浏览器的版本和其他的一些信息

还有一些其他的

②history对象的属性:

length——返回浏览器当前窗口的历史回话页面的数量

③history对象的方法:

back(),使浏览器返回浏览器历史列表中的后一页

forward(),使浏览器返回浏览器历史列表中的前一页

go(),接收一个整形参数,可正可负,代表前进和返回几个页面,如果参数超过历史列表内容,将什么也不做。

时间: 2024-10-21 18:06:02

第八章——对象的相关文章

第八章 类对象的特性

第八章 类对象的特性 面向对象程序设计有4个主要特点:抽象.封装.继承和多态. 任何对象都应当具有两个要素,即属性和行为.对象是由一组属性和一组行为构成的. 1.类的声明和对象的定义 *类是对象的抽象,对象是类的具体实现. *类的声明: class 类名{ 成员属性:成员:... } *对象的定义:与普通类型相同: 2.类的成员函数 *成员函数的性质:public,protected,private *类外定义成员函数:(要体现作用域)函数类型 类名::函数名(参数表){函数体:} *内置成员函

《Entity Framework 6 Recipes》中文翻译系列 (45) ------ 第八章 POCO之获取原始对象与手工同步对象图和变化跟踪器

翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 8-6  获取原始对象 问题 你正在使用POCO,想从数据库获取原始对象. 解决方案 假设你有如图8-7所示的模型.你正在离线环境下工作,你想应用在获取客户端修改之前,使用Where从句和FirstDefault()方法从数据库中获取原始对象. 图8-7.包含一个单独实体Item的模型 按代码清单8-9的方式,在获取实体之后,使用新值更新实体并将其保存到数据库中. 代码清单8-9. 获取最新

[学习笔记—Objective-C]《Objective-C 程序设计 第6版》第十八章 复制对象

origin = pt; 将对象pt的地址复制到origin中.两个变量都指向内存中同一个地址 Foundation对象:将一个变量赋值给另一个对象仅仅创建了另一个对这个对象的引用(地址). Part 1.copy 和 mutablecopy 方法:创建对象的副本 复制对象(的引用) dataArray2 = dataArray;//创建了内存中同一数组对象的另一个引用:总共一个数组 创建对象的副本 dataArray2 = [dataArray mutalbeCopy];//创建信的dataA

第八章 面向对象之一:对象的理解

js的面向对象概念跟C++.Java不太一样,更像是一个精简版的设计(可能是因为语言设计者本身讨厌面向对象随便为了应付弄出来一个?还是为了减轻浏览器的负担才这么设计,我觉的是第二者哦,毕竟解释型程序没有编译型程序效率高). ECMAScript对对象的定义:”无需属性的集合,其属性可以包含基本值.对象或者函数“.等等,这句话眼熟啊,想起来了吧,Object类型就是这么定义的啊.所以,Object类型就是js里所有对象(类)的父类. 而所有通过new Array.new String的变量都是Ar

第八章 Python可迭代对象、迭代器和生成器

8.1 可迭代对象(Iterable) 大部分对象都是可迭代,只要实现了__iter__方法的对象就是可迭代的. __iter__方法会返回迭代器(iterator)本身,例如: >>> lst = [1,2,3] >>> lst.__iter__() <listiterator object at 0x7f97c549aa50> Python提供一些语句和关键字用于访问可迭代对象的元素,比如for循环.列表解析.逻辑操作符等. 判断一个对象是否是可迭代对象

第十八章,对象及对象指针的练习(C++)

这只是一个简单的对象实例练习,之前还写过一个对象和其他知识点结合使用例子http://blog.csdn.net/qingbowen/article/details/46126549(简易学员管理系统). main.cpp #include <iostream> #include "car.h" int main(int argc, char** argv) { //实例化一个对象 car car01; //给对象赋值 car01.name="别克";

Redis 设计与实现(第八章) -- 对象

概述 前面几张介绍了一些Redis的数据结构,比如SDS,集合,字典等,但是Redis并不会直接使用这些数据结构来实现键值对数据库,而是基于这些数据结构创建了一个对象系统,这些对象包括字符串对象,列表对象,哈希对象,集合对象和有序集合对象.每种对象都用到了一种或多种前面介绍的数据结构. 通过不同类型的对象,Redis在执行命令之前可以根据类型来判断一个对象是否可以执行给定的命令. Redis对象还使用了基于引用计数的内存回收机制,当程序不再使用某个对象时,这个对象占用的内存就会释放. Redis

Flask【第八章】:Flask之flask实例化配置以及flask对象配置

Flask之flask实例化配置以及flask对象配置 flask是一个非常灵活且短小精干的web框架,那么灵活性从什么地方体现呢? 一.flask实例化配置 有一个神奇的东西叫flask配置,这个东西要怎么用呢?它能给我们带来怎么样的方便呢? 首先展示一下: from flask import Flask app = Flask(__name__) # type:Flask app.config["DEBUG"] = True 这句app.config["DRBUG&quo

第八章第1-2讲:python之对象

第1讲:魔法——对象 1.对象出发点:是提高编程的效率,解决重复的劳动,人性懒惰的使然. 2.对象包含2个方面: 属性:如何描述对象 方法:对该像能做什么? 对象=属性+方法 第2讲:创建对象 1. 类:对象 类:具有相同属性和方法的集合(好比户型图) 对象:讲抽象实现为显示的存在(根据户型图实现的一个个相同的布局格局的房子) 2.定义类: class Classname: 属性 方法 3.创建类与实例化对象 class Person: def setName(self,name): self.