A1 javascript对象的基本原理

  JS 的 Object 与其他兄弟面向对象所定义的根本对象,几乎没有什么共同之处。

  JS 的 Object 一旦创建,它不持有任何数据,而且不表示什么语义。

A1.1 对象怎么称为对象

var shinyAndNew = new Object();

  还可以更简单(不久会看到),目前这样就行了。它看起来什么都没有都没包含。直到我们开始添加东西——称为属性的东西。

A1.2 对象的属性

  就像服务器端对象,js 对象可以包含数据和方法。不像服务器端同胞,这些元素不是预先声明。我们随时可以动态创建。

var ride = new Object();
ride.make = 'Yamaha';
ride.model = 'V-Star Silverado 1100';
ride.year = 2005;
ride.purchased = new Date(2005,3,12);

灵活性总是与代价相伴!

例如,后续部分想改变购买日期:

ride.purchased = new Date(2005,3,12);

没问题。除非打错字,purchased 写成 purcahsed

ride.purcahsed = new Date(2005,3,12);

没有编译器会警告:已经错误。名为 purcahsed 的新属性被我们创建,后来我们纳闷,在引用正确拼写的 purchased 属性时为什么新日期无效?

在引用属性时,可以连续的引用对象(作为父对象的属性)的属性。假设给 ride 实例添加新属性以便保存机车的所有者。这个属性是另一个 javascript 对象,包含属性,如所有者的姓名和职业:

var owner = new Object();
owner.name ='Tg';
owner.occupation = 'bounty hunter';
ride.owner = owner;

为了访问嵌套的属性

var ownerName = rade.owner.name;

可以使用的嵌套层次是没有限制的

  顺便说下,这些代码片段创建说明目的的所有中间变量(如 owner)不是必须的。

  到目前为止,我们用(.)操作符来引用对象的属性。但那原来是执行属性引用的更为通用的操作符的同义词。

  例如,一个属性名为 color.scheme,会怎么样?注意到这个名称里的圆点了吗?它在操作中抛出破坏性的错误,因为 javascript 解释器试着将 scheme 当成 color 的内置的属性。

  你说:“好,只要不那样做就行!”不过空格符如何呢?可能被误认为是分隔符而不是名称的一部分的其他字符呢?最重要的是,如果我们不知道属性名称是什么,却把它当作另一个变量里的值,或把它当作表达式的求值结果?

对于所有这些情况,点操作符不足胜任,因此必须以更通用的表达式来访问属性。通用的属性引用操作符的格式为

object[propertyNameExpression]

在那里propertyNameExpression是 javascript 表达式,其求值结果作为字符串而形成将被引用的属性名称。例如,下列3个引用是等效的:

ride.make
ride['make']
ride['m'+'a'+'k'+'e']

也等价于

var p = 'make';
ride[p];

对于其名称并不构成有效 javascript 标识符的属性来说,利用通用的引用操作符是引用该属性的唯一途径,比如

ride["a property name that's rather odd!"]

其属性名称包含对于 javascript 标识符来说不合法的字符(或属性名称是其他变量的值)。

new操作符来创建新实例,并且利用独立的赋值语句来指派每一个属性从而建立对象,是繁琐的事情。

A1.3 对象文本

上一节对摩托车的一些属性建模,并把这个对象指派给名为ride的变量。为了这样做,我们用了两个new操作,名为owner的中间变量和赋值语句。这样既单调乏味又冗长易错,我们难以在快速地检查代码时从视觉上把握对象的结构。

幸亏我们可以使用更为简洁、易于扫读的表示法。

var ride = {
make: 'Yamaha',
model: 'V-Star Silverado 1100',
year: 2005,
purchased: new Date(2005,3,12),
owner:{
name: 'Tg',
occupation: 'bounty hunter'
}
};

这个片段利用 对象字面量 来创建ride对象,与上一节用赋值语句锁创建的ride对象相同。

这个表示法称为JSON

owner属性的声明可见,对象声明可被嵌套。

在 json 里通过在方括号内放置逗号分隔的元素列表来表达数组,

var someValues = [2,3,4,5,6,7,17,19,29,31,37];

从这一节所提供的示例,对象引用经常存储在变量或者其他对象的属性里。

A1.4 对象作为窗体

现在介绍了两种存储JS对象方式:变量和属性。

var aVariable = 'This is a text.';
someObject.aProperty = 'This is a text.';

它们执行了不同的操作吗?并没有。

var 关键字用在顶级层次,在任意函数体之外,它是一个编程友好符号,用来引用预定义的 Javascript windows对象的属性。定义范围内的任意引用都会隐式定义在 window 对象上。这意味着下面的语句,如果在顶级层次(函数体外)是等价的

var foo = 'bar';
window.foo = 'bar';
foo = 'bar';

《jquery实战》javascript 必知必会(1)的更多相关文章

  1. 【EatBook】-NO.1.EatBook.1.JavaData.1.001-《JSON 必知必会-Introduction to JavaScript Object Notation》-

    1.0.0 Summary Tittle:[EatBook]-NO.1.EatBook.1.JavaData.1.001-<JSON 必知必会-Introduction to JavaScrip ...

  2. MySql必知必会实战练习(二)数据检索

    在上篇博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,下面进行数据检索和过滤操作. 1. Select子句使用顺序 select--->DISTINCT---& ...

  3. MySql必知必会实战练习(三)数据过滤

    在之前的博客MySql必知必会实战练习(一)表创建和数据添加中完成了各表的创建和数据添加,MySql必知必会实战练习(二)数据检索中介绍了所有的数据检索操作,下面对数据过滤操作进行总结. 1. whe ...

  4. .NET程序员项目开发必知必会—Dev环境中的集成测试用例执行时上下文环境检查(实战)

    Microsoft.NET 解决方案,项目开发必知必会. 从这篇文章开始我将分享一系列我认为在实际工作中很有必要的一些.NET项目开发的核心技术点,所以我称为必知必会.尽管这一系列是使用.NET/C# ...

  5. H5系列之History(必知必会)

    H5系列之History(必知必会)   目录 概念 兼容性 属性 方法 H5方法       概念     理解History Api的使用方式 目的是为了解决哪些问题   作用:ajax获取数据时 ...

  6. 2015 前端[JS]工程师必知必会

    2015 前端[JS]工程师必知必会 本文摘自:http://zhuanlan.zhihu.com/FrontendMagazine/20002850 ,因为好东东西暂时没看懂,所以暂时保留下来,供以 ...

  7. [ 学习路线 ] 2015 前端(JS)工程师必知必会 (2)

    http://segmentfault.com/a/1190000002678515?utm_source=Weibo&utm_medium=shareLink&utm_campaig ...

  8. H5系列之地理位置(必知必会)

    H5之地理位置必知必会     [02]概念   规范地址:http://www.w3.org/TR/geolocation-API/     HTML5 Geolocation(地理定位)用于定位用 ...

  9. Java并发必知必会第三弹:用积木讲解ABA原理

    Java并发必知必会第三弹:用积木讲解ABA原理 可落地的 Spring Cloud项目:PassJava 本篇主要内容如下 一.背景 上一节我们讲了程序员深夜惨遭老婆鄙视,原因竟是CAS原理太简单? ...

  10. SQL必知必会,带你系统学习

    你一定听说过大名鼎鼎的Oracle.MySQL.MongoDB等,这些数据库都是基于一个语言标准发展起来的,那就是SQL. SQL可以帮我们在日常工作中处理各种数据,如果你是程序员.产品经理或者是运营 ...

随机推荐

  1. 【BZOJ1047】[HAOI2007]理想的正方形(单调队列,动态规划)

    [BZOJ1047][HAOI2007]理想的正方形(单调队列,动态规划) 题面 BZOJ 洛谷 题解 直接一个单调队列维护一下没给点和它前面的\(n\)个位置的最大值,再用一次单调队列维护连续\(n ...

  2. ubuntu下sublime Text3配置C++编译环境

    今天在Ubuntu下用sublime Text3编译C++代码,环境配的不太顺利,下边展示一个实例. 1.主函数main.cpp #include <iostream> #include ...

  3. CentOS 7 系统root用户忘记密码的重置方法

    在一台服务器我们忘记了root的账号或者root账号错误怎么办,我们只有进入到内核里面去修改,具体的操作如下: 1.进入内核 在开机的时候出现下图的界面时 按e键进入内核入下图 2.进入单用户模式 在 ...

  4. Access时间日期函数大全

    这里特别推荐WeekdayName() 函数.MonthName() 函数,将日期转换为中文星期名与月份,如"星期一"."五月"一.Date() 函数.Now( ...

  5. Python 内置函数---map()

    描述 map() 实现对一个可迭代对象中的每一个元素都应用一个函数 将被传入的函数作用到一个可迭代对象的每一个元素上,并且返回了包含了所有这些函数调用结果的一个迭代器. 由于map期待传入一个函数并会 ...

  6. [Leetcode]找到出现不同次数的数字(通用解法)

    今天在leetcode上遇到了 137. Single Number II 这道题: 给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现了三次.找出那个只出现了一次的元素.(Give ...

  7. SQL记录-PLSQL日期与时间

    PL/SQL日期及时间 PL/SQL提供两个日期和时间相关的数据类型: 日期时间(Datetime)数据类型 间隔数据类型 datetime数据类型有: DATE TIMESTAMP TIMESTAM ...

  8. JAVA中日期转换和日期计算的方法

    日期的格式有很多形式,在使用过程中经常需要转换,下面是各种类型转换的使用例子以及日期计算方法的例子. 一.不同格式日期相互转换方法 public class TestDateConvertUtil { ...

  9. 转 -----那些年总也记不牢的IO

    关于资源关闭: 一般情况下是:先打开的后关闭,后打开的先关闭 另一种情况:看依赖关系,如果流a依赖流b,应该先关闭流a,再关闭流b 例如处理流a依赖节点流b,应该先关闭处理流a,再关闭节点流b 当然完 ...

  10. centos安装lrzsz

    yum -y install lrzsz 使用rz打开上传框