自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

JavaScript類和繼承:this屬性

開發(fā) 前端
本文介紹了JavaScript里面的this屬性。這個(gè)屬性是理解JavaScript類和繼承的重要基礎(chǔ)。

this屬性表示當(dāng)前對象,如果在全局作用范圍內(nèi)使用this,則指代當(dāng)前頁面對象window; 如果在函數(shù)中使用this,則this指代什么是根據(jù)運(yùn)行時(shí)此函數(shù)在什么對象上被調(diào)用。 我們還可以使用apply和call兩個(gè)全局方法來改變函數(shù)中this的具體指向。

先看一個(gè)在全局作用范圍內(nèi)使用this的例子:

  1. < script type="text/javascript"> 
  2.     console.log(this === window);  // true  
  3.     console.log(window.alert === this.alert);  // true  
  4.     console.log(this.parseInt("021", 10));  // 10  
  5. < /script> 

函數(shù)中的this屬性是在運(yùn)行時(shí)決定的,而不是函數(shù)定義時(shí),如下:

  1. // 定義一個(gè)全局函數(shù)  
  2. function foo() {  
  3.     console.log(this.fruit);  
  4. }  
  5. // 定義一個(gè)全局變量,等價(jià)于window.fruit = "apple";  
  6. var fruit = "apple";  
  7. // 此時(shí)函數(shù)foo中this指向window對象  
  8. // 這種調(diào)用方式和window.foo();是完全等價(jià)的  
  9. foo();  // "apple"  
  10.  
  11. // 自定義一個(gè)對象,并將此對象的屬性foo指向全局函數(shù)foo  
  12. var pack = {  
  13.     fruit: "orange",  
  14.     foo: foo  
  15. };  
  16. // 此時(shí)函數(shù)foo中this指向window.pack對象  
  17. pack.foo(); // "orange"  
  18.  

全局函數(shù)apply和call可以用來改變函數(shù)中this屬性的指向,如下:

  1. // 定義一個(gè)全局函數(shù)  
  2.  function foo() {  
  3.      console.log(this.fruit);  
  4.  }  
  5.    
  6.  // 定義一個(gè)全局變量  
  7.  var fruit = "apple";  
  8.  // 自定義一個(gè)對象  
  9.  var pack = {  
  10.      fruit: "orange" 
  11.  };  
  12.    
  13.  // 等價(jià)于window.foo();  
  14.  foo.apply(window);  // "apple"  
  15.  // 此時(shí)foo中的this === pack  
  16.  foo.apply(pack);    // "orange"  
  17.   

注:apply和call兩個(gè)函數(shù)的作用相同,唯一的區(qū)別是兩個(gè)函數(shù)的參數(shù)定義不同。

因?yàn)樵贘avaScript中函數(shù)也是對象,所以我們可以看到如下有趣的例子:

  1. // 定義一個(gè)全局函數(shù)  
  2. function foo() {  
  3.     if (this === window) {  
  4.         console.log("this is window.");  
  5.     }  
  6. }  
  7.  
  8. // 函數(shù)foo也是對象,所以可以定義foo的屬性boo為一個(gè)函數(shù)  
  9. foo.boo = function() {  
  10.     if (this === foo) {  
  11.         console.log("this is foo.");  
  12.     } else if (this === window) {  
  13.         console.log("this is window.");  
  14.     }  
  15. };  
  16. // 等價(jià)于window.foo();  
  17. foo();  // this is window.  
  18.  
  19. // 可以看到函數(shù)中this的指向調(diào)用函數(shù)的對象  
  20. foo.boo();  // this is foo.  
  21.  
  22. // 使用apply改變函數(shù)中this的指向  
  23. foo.boo.apply(window);  // this is window.  

【編輯推薦】

  1. ExtJS Grid Tooltip的3+1種實(shí)現(xiàn)方式總結(jié)
  2. JavaScript異步調(diào)用框架的鏈?zhǔn)綄?shí)現(xiàn)
  3. JavaScript異步調(diào)用框架的jQuery風(fēng)格鏈?zhǔn)秸{(diào)用
  4. JavaScript異步調(diào)用框架的代碼實(shí)現(xiàn)
  5. JavaScript異步調(diào)用框架用例設(shè)計(jì)
責(zé)任編輯:yangsai 來源: 博客園
相關(guān)推薦

2009-07-08 17:51:45

constructor

2009-07-08 17:48:18

prototype屬性

2011-05-25 16:23:35

Javascript類繼承

2009-01-04 09:08:30

面向?qū)ο?/a>繼承接口

2012-02-14 09:45:02

JavaScript

2011-08-31 14:48:33

JavaScript

2017-07-21 09:40:35

Python類、繼承和多態(tài)

2012-11-08 10:40:47

JavaScript原型鏈

2011-07-08 10:25:55

JavaScript

2009-09-09 11:28:40

Scala類

2011-07-07 13:39:14

Cocoa 框架

2011-08-24 13:56:27

JavaScript

2023-10-18 16:30:50

2021-12-04 11:17:32

Javascript繼承編程

2011-03-10 14:19:56

JavaScript

2010-09-09 09:16:27

JavaScriptdiv

2023-09-27 23:28:28

Python編程

2021-12-09 10:51:47

Go繼承

2013-09-18 14:01:46

JavaScript

2020-04-28 10:05:33

JavaScript繼承前端
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號