WEB开发网      濠电姷鏁告繛鈧繛浣冲洤纾瑰┑鐘宠壘閻ょ偓銇勯幇鍫曟闁稿鍠愰妵鍕冀閵娧佲偓鎺楁⒒閸曨偄顏柡宀嬬畱铻e〒姘煎灡绗戦梻浣筋嚙濮橈箓顢氳濠€浣糕攽閻樿宸ュΔ鐘叉啞缁傚秹宕滆绾惧ジ寮堕崼娑樺缂佹宀搁弻鐔风暋閻楀牆娈楅梺璇″枓閺呯姴鐣疯ぐ鎺濇晝闁靛牆妫欓蹇旂節閻㈤潧浠﹂柛銊ョ埣楠炴劙骞橀鑲╋紱闂佽宕樼粔顔裤亹閹烘挸浜归梺缁樺灦閿曗晛螞閸曨垱鈷戦柟鑲╁仜婵″ジ鎮楀☉鎺撴珖缂侇喖顑呴鍏煎緞濡粯娅囬梻浣瑰缁诲倿寮绘繝鍥ㄦ櫇闁稿本绋撻崢鐢告煟鎼淬垻鈯曢柨姘舵煟韫囥儳绋荤紒缁樼箖缁绘繈宕橀妸褌绱濋梻浣筋嚃閸ㄤ即宕弶鎴犳殾闁绘梻鈷堥弫鍌炴煕閳锯偓閺呮瑧妲愬Ο琛℃斀闁绘劕妯婇崵鐔封攽椤旇棄鍔ら摶鐐烘煕閺囥劌澧柛娆忕箻閺屽秹宕崟顒€娅g紓浣插亾濠㈣泛顑囩粻楣冩煙鐎涙ḿ绠橀柨娑樼У椤ㄣ儵鎮欓鍕紙闂佽鍠栫紞濠傜暦閹偊妲诲┑鈩冨絻椤兘寮诲☉銏犖╅柕澶堝労閸斿绱撴担绋库偓鍝ョ矓瑜版帒鏋侀柟鍓х帛閺呮悂鏌ㄩ悤鍌涘 ---闂傚倸鍊烽悞锔锯偓绗涘厾娲煛閸涱厾顔嗛梺璺ㄥ櫐閹凤拷
开发学院网页设计JavaScript 浅谈JavaScript中的对象和类型(上) 阅读

浅谈JavaScript中的对象和类型(上)

 2010-02-03 00:00:00 来源:WEB开发网 闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�闂傚倸鍊风粈渚€骞夐敓鐘插瀭闁汇垹鐏氬畷鏌ユ煙閹殿喖顣奸柛搴$У閵囧嫰骞掗幋婵冨亾閻㈢ǹ纾婚柟鐐灱濡插牊绻涢崱妤冃℃繛宀婁簽缁辨捇宕掑鎵佹瀸闂佺懓鍤栭幏锟�濠电姷鏁告慨顓㈠箯閸愵喖宸濇い鎾寸箘閹规洟姊绘笟鈧ḿ褍煤閵堝悿娲Ω閳轰胶鍔﹀銈嗗笂閼冲爼鍩婇弴銏$厪闁搞儮鏅涙禒褏绱掓潏鈺佷槐闁轰焦鎹囬弫鎾绘晸閿燂拷闂傚倸鍊风欢姘缚瑜嶈灋闁圭虎鍠栫粻顖炴煥閻曞倹瀚�  闂傚倸鍊烽懗鑸电仚缂備胶绮〃鍛村煝瀹ュ鍗抽柕蹇曞У閻庮剟姊虹紒妯哄闁诲繑姘ㄩ埀顒佸嚬閸撶喎顫忓ú顏勫瀭妞ゆ洖鎳庨崜浼存⒑闁偛鑻晶顔剧磼婢跺﹦绉虹€殿喖顭锋俊姝岊槷闁稿鎹囧Λ鍐ㄢ槈濞嗗繑娈橀梻浣风串缂嶁偓濞存粠鍓熼崺鈧い鎺戝€归弳顒勬煕鐎n亷韬€规洑鍗冲鍊燁槾闁哄棴绠撻弻銊╂偆閸屾稑顏�
核心提示: 很显然调用test的时候,window就是test的宿主对象,浅谈JavaScript中的对象和类型(上)(4),理解了这一点,我们来看下面这段脚本:functionalarm(){this.a=window.alert;test();}functiontest(){this.a("a

很显然调用test的时候,window就是test的宿主对象。

理解了这一点,我们来看下面这段脚本:

function alarm()
{
  this.a = window.alert;
  test();
}
function test()
{
  this.a("abc");
}
alarm();
a("hello world!");

怎么理解这一段代码?首先调用alarm函数,这个函数里面的this是什么?没错,是window。为什么?因为alarm调用的时候其实等同于 window.alarm,所以函数内的this就是window。然后this.a = window.alert,这等同于window.a = window.alert。然后执行test函数,同理,test函数里面的this也是window。整理后,其实整个代码可以解释成这样:

function alarm()
{
  window.a = window.alert;
  test();
}
function test()
{
  window.a("abc");
}
window.alarm();
window.a("hello world!");

来看一个this不是window的情况:

var o = new Object(); //与var o = function() { };一样,都可以创建一个自定义对象,我们只需要一个对象,不必关心它是函数还是什么。
o.text = "hello object!"; //设置o的text成员
o.alarm = function()//定义一个函数,并设置为o的成员
{
  window.alert(this.text); //注意这个this
}
alarm = o.alarm; 
text = "hello world!";
alarm();
o.alarm();

猜一下执行结果吧。

值得注意的是,其实两个alarm是同一个函数,不同的是在调用上下文中,一个的宿主是window,一个的宿主是o,所以调用的结果不同。this所代表的对象,与函数本身没有任何关系,它取决于调用函数的上下文!

最后一个值得特别说明的东西是,函数的scope对象是不能用this捕获到的,考虑如下脚本:

text = "hello world!";
function test()
{
  var text = "hello function!";
  var a = function()
  {
    window.alert(this.text);
  }
  a();
}
test();

结果将是hello world!而不是hello function!,当然你可能会想,a的宿主应该是执行函数时的函数的scope对象,然后这个对象应该有个成员text。但事实并非如此,在这种情况下,a的宿主仍然是window。这一点可以理解为:函数的scope对象并不是一个真正的对象,它只是JavaScript运行时用来保存变量的东西。

这个现象,现在并没有特别好的办法去解释,当然,大家只需要记住,如果调用函数的时候,前面没有".",那么this就总会是window了。

上一页  1 2 3 4 

Tags:JavaScript 对象 类型

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接