检索:
代码样例:
var stooge = { "first-name":"Jerome", "lastname":"Howard" } document.writeln(stooge["first-name"]); document.writeln(stooge.lastname);
如果对象属性名是合法的javascript标识符,可以用 ‘对象.属性名’ 表示法
否则用‘对象["属性名"]’表示法
||和&&的作用
||可以用来填充默认值
var middle = stooge["middle-name"]||"(none)"; //(none)
尝试从undefined的成员属性中取值将会导致TypeError异常。这时通过&&来避免错误
document.writeln(stooge["middle-name"]); //undefined
document.writeln(stooge["middle-name"].model); //TypeError: stooge['middle-name'] is undefined
document.writeln(stooge["middle-name"]&&stooge["middle-name"].model); //undefined
更新:
对象里的值可以通过赋值语句来更新,如果属性值已存在,它被替换掉
如果之前没有那个属性名,该属性被扩充到对象中
stooge.middlename = "Lily"; //middlename属性被扩充到stooge对象 stooge.lastname = "Harry"; //lastname的值变为Harry
引用:
对象通过引用来传递,它们永远不会被复制:
var x = stooge; x.middlename = "change"; document.writeln(stooge.middlename); //change
原型:
每个对象都连接到一个原型对象,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype,它是javascript的标配对象。
当你创建一个新对象,你可以选择某个对象作为它的原型。我们将给Object增加一个create方法,来实现创建一个使用原对象作为其原型的新对象。
if(typeof Object.beget !== 'function'){ Object.create = function(o){ var F = function(){}; F.prototype = o; return new F(); } }
一个使用例子:
var another_stooge = Object.create(stooge); document.writeln(another_stooge["first-name"]); //Jerome
委托:
原型连接只有在检索时才会被用到。如果我们尝试去获取对象的属性值,但该对象没有此属性名,那么javascript会尝试从原型对象获取此属性值,如果该原型对象也没有,那么再从它的原型中寻找,依次类推,知道达到终点Object.prototype,如果想要的属性完全不在原型链中,那么结果返回undefined。这个过程为委托。
原型关系是一种动态的关系,如果我们添加了一个属性到原型中,该属性立即对所有基于该原型创建的对象可见。
stooge.professin = 'actor' another_stooge.profession //actor
原型连接在更新时不起作用:
another_stooge.profession = 'actress'; stooge.profession //actor
反射:
typeof 操作符对确定属性很有帮助
typeof stooge.constructor //function typeof stooge.manifest //undefined
有两种方法处理掉不需要的属性。第一个是让程序做检查丢弃值为函数的属性。
另一种方式是使用hasOwnProperty方法,如果对象拥有独有属性返回true。
枚举:
for in语句可以遍历一个对象的所有属性,包括函数,和我们可能不关心的原型属性。有必要进行过滤
stooge.func:function(){alert('hi')}; for(values in stooge){ if(typeof stooge[values]!== 'function'){ document.writeln(values+':'+stooge[values]); } } //lastname:Harry //middlename:change //profession:actor
属性名的顺序是不确定的,为了确保属性以特定的顺序出现,就要避免使用for in,创建一个数组,使用for
var properties = ['first-name','middlename','lastname','profession']; for(i=0;i<properties.length;i++){ document.writeln(properties[i]+':'+stooge[properties[i]]); } //first-name:Jerome //middlename:change //lastname:Harry //profession:actor
删除:
delete运算符可以用来删除对象的属性。如果对象包含此属性,该属性就会被移除,它不会触及原型链的任何对象,删除对象的属性可能让来自原型链的属性显露出来
delete another_stooge.profession document.writeln(another_stooge.profession); //actor为stooge的属性值
怎样减少全局变量的污染:
为你的应用只创建一个唯一的全局变量
var MYAPP = {};
该变量变为容器
添加变量的方式
MYAPP.stooge = { "first-name":"joe", "lastname":"Howard" };
只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或类库之间发生冲突的可能性会显著降低。
在函数中使用闭包来进行信息隐藏也是减少全局污染的方法
相关推荐
JavaScript语言精粹完整版,想要提升的朋友有福了。
这是一份《javascript语言精粹》PDF版的压缩包,本书对于javascript的重要知识点介绍很到位,你值得拥有!
本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深...
JavaScript语言精粹_修订版.pdf
JavaScript 曾是“世界上最被误解的语言”,因为它担负太多的特性,包括糟糕的交互和失败的设计,但随着Ajax 的到来,JavaScript“从最受误解的编程语言演变为最流行的语言”,这除了幸运之外,也证明了它其实是一门...
Javascript高级编程学习笔记27——BOM1window对象1.docx
JavaScript语言精粹.pdf
本书通过对JavaScript语言的分析,甄别出好的和坏的特性,从而提取出相对这门语言的整体而言具有更好的可靠性、可读性和可维护性的JavaScript的子集,以便你能用它创建真正可扩展的和高效的代码。 雅虎资深...
JavaScript语言精粹 包含pdf 与 epub
JavaScript语言精粹,这本书是很值得阅读的,对前端人员是很有必要的
JavaScript语言精粹
JavaScript语言精粹 中文版 共两部分
JavaScript语言精粹pdf 中文高清 pdf带有标签
JavaScript语言精粹(中文高清版)PDF
javascript语言精粹_修订版 带书签 javascript语言精粹_修订版 带书签 javascript语言精粹_修订版 带书签
JavaScript语言精粹,已经编辑好书签,分享给各位初学者