首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > JavaScript >

javascript语言精髓读书笔记——第三章对象(一)

2013-08-04 
javascript语言精粹读书笔记——第三章对象(一)检索:代码样例:var stooge {first-name:Jerome,lastna

javascript语言精粹读书笔记——第三章对象(一)

检索:

代码样例:

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    //functiontypeof 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.professiondocument.writeln(another_stooge.profession);//actor为stooge的属性值

?怎样减少全局变量的污染:

为你的应用只创建一个唯一的全局变量

var MYAPP = {};

?该变量变为容器

添加变量的方式

MYAPP.stooge = {    "first-name":"joe",    "lastname":"Howard"};

只要把全局性的资源都纳入一个名称空间之下,你的程序与其他应用程序、组件或类库之间发生冲突的可能性会显著降低。

在函数中使用闭包来进行信息隐藏也是减少全局污染的方法

?

?

?

?

?

热点排行
Bad Request.