今天換道題,新鮮出爐的 哇,這個題乍一看有點繞。我們可以簡單的分析一下 首先我們先註意下這段代碼主要做了什麼: 創建一個構造函數Model,利用Model去構建m對象 構造函數原型對象定義了兩個函數, say 和 getFullName m調用 say 函數 ,其中 say 函數內的 this 此時 ...
今天換道題,新鮮出爐的
var Model=function(){ this.name='lilei'; this.age=20; } Model.prototype.say=function(){ console.log(this.name);//① console.log(this.getFullName());//② function test(){ console.log(this.name);//③ console.log(this.getFullName());//④ } test(); } Model.prototype.getFullName=function(){ return this.name+''; }; var m=new Model(); m.say();
哇,這個題乍一看有點繞。我們可以簡單的分析一下
首先我們先註意下這段代碼主要做了什麼:
創建一個構造函數Model,利用Model去構建m對象
構造函數原型對象定義了兩個函數, say 和 getFullName
m調用 say 函數 ,其中 say 函數內的 this 此時指向對象 m
m有兩個屬性 name 和 age 所以 ① 輸出 lilei
調用getFullName函數的是say中的this 根據上下文 他應該是m
函數內在最後返回了一個 this.name+'' 這個時候根據上下文
this指向依然是m JavaScript的鏈式調用在這裡也有一些體現
所以②輸出內容為 lilei
當test在say函數內聲明 並且調用時,我們只需要關註一件事
調用test的是誰 如果沒有任何指示,他的上下文就是window
那③ 輸出結果就是window.name 它預設是個空字元串
④這裡會直接報錯,因為window內不存在getFullName函數
正確的輸出結果是:
——————end——————
這幾天在做活動,後面可能要進入正式開發的流程了
最近真的閑的長毛了,雖然還挺爽,但是長期不正經開發工作很容易懶惰的
加了個油~~