• 《jquery实战》javascript 必知必会(1)


    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;
    

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

      顺便说下,这些代码片段创建说明目的的所有中间变量(如 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';
    
  • 相关阅读:
    为什么多线程读写 shared_ptr 要加锁?
    iOS开发那些事iOS6 UI状态保持和恢复
    Hook钩子程序(续)
    JavaScript 项目构建工具 Grunt 实践:任务和指令
    浏览器插件之ActiveX开发(五)
    mongodb副本集架构搭建
    Hadoop 0.23.3版本
    Grails 中使用 grailseventspush 实现 ajax/comet/websocket 消息推送
    razor中@相对于<% %>的优势
    Chrome developer tool介绍(javascript调试)
  • 原文地址:https://www.cnblogs.com/tangge/p/6765295.html
Copyright © 2020-2023  润新知