在线观看不卡亚洲电影_亚洲妓女99综合网_91青青青亚洲娱乐在线观看_日韩无码高清综合久久

鍍金池/ 問答/HTML/ js 類封裝 共有方法

js 類封裝 共有方法

   /*1.公有方法是可以在類的外部被調(diào)用的, 
  2.但是它不可以訪問類的私有屬性。 
  3.公有方法必須在類的內(nèi)部或者外部通過類的prototype屬性添加。 */ 
   var person = function(){
         var age = 22;
         function showName(){
             console.log(this.name)
         };
         this.show = function(){
             console.log(this.name);
             showName(); 
         }
   }
   person.prototype.setname = function(str){
     name = str;     
   }
   var p1 = new person();
   p1.setname("大寶");
   p1.show();
   console.log(p1.age);//undefined

為什么this.show方法下面的this.name 為undefiend,而showName方法下的this.name 為大寶?

回答
編輯回答
陪妳哭

this指向的問題,別想復(fù)雜了。
this.show,this指向p1,p1沒name屬性。
showName()直接調(diào)用,指向window。

2018年1月31日 07:46
編輯回答
吢涼
兩個(gè)this指向不同,你把代碼改成如下,把兩個(gè)this打印出來就明白了

var person = function(){
         var age = 22;
         function showName(){
             console.log(this)
         };
         this.show = function(){
             console.log(this);
             showName(); 
         }
   }
   person.prototype.setname = function(str){
     name = str;     
   }
   var p1 = new person();
   p1.setname("大寶");
   p1.show();
   console.log(p1.age);
2017年10月25日 00:49