国产xxxx99真实实拍_久久不雅视频_高清韩国a级特黄毛片_嗯老师别我我受不了了小说

資訊專欄INFORMATION COLUMN

Javascript this詳解

vvpale / 1311人閱讀

摘要:普通函數(shù)中的在中,凡是沒有定義在對(duì)象構(gòu)造函數(shù)或中的函數(shù),其中的都是全局對(duì)象。它僅僅是在另一個(gè)函數(shù)中的一個(gè)函數(shù),顯然符合上文描述的凡是沒有定義在對(duì)象構(gòu)造函數(shù)或中的函數(shù),其中的都是如果想在內(nèi)部函數(shù)訪問(wèn)這個(gè)對(duì)象,也很好解決首選,有的資料上會(huì)用。

不論是面向?qū)ο螅€是基于對(duì)象的語(yǔ)言,都會(huì)有this,我更喜歡叫他this指針,如果你不理解指針,認(rèn)為它是個(gè)引用也無(wú)妨。
這一片文章就是整理一下在各個(gè)情況下的this到底引用的是誰(shuí)。一次來(lái)明白this的用法,下面將是一段段的代碼,每段代碼后面可能有簡(jiǎn)短的說(shuō)明,就是這樣簡(jiǎn)單粗暴。

說(shuō)明一下,這篇文章是基于瀏覽器的,不是原生js,區(qū)別在于瀏覽器全局中的this是Window,而原生js中是global。其次,博主使用的控制臺(tái)輸出,如果你使用document.write方法或alert輸出this,由于這兩個(gè)方法會(huì)調(diào)用對(duì)象的toString方法,你會(huì)得到[object Window]或[object Object]。

注意:本文中對(duì)一般函數(shù)普通函數(shù)的措辭,這個(gè)只是博主個(gè)人的說(shuō)法,由于上下文(context)的解釋并不是很容易懂,博主自定義了這2個(gè)說(shuō)法,幫助理解。

普通函數(shù)中的this
function f(){
  console.log(this); //Window
}

在js中,凡是沒有定義在對(duì)象、構(gòu)造函數(shù)或prototype中的函數(shù),其中的this都是全局對(duì)象Window。下文把這樣的函數(shù)稱為一般函數(shù)

var a = [1,2,3,4,5];
var b = a.map(function(x){
  console.log(this);  //Window
  return x * 2;
});

同理上面這個(gè)函數(shù)也沒有定義在對(duì)象、構(gòu)造函數(shù)或者prototype里,所以得到的依然是Window。
注意:Array.prototype.map是定義在數(shù)組原型中的,但是給map傳進(jìn)去的參數(shù)函數(shù)就是一個(gè)一般函數(shù)

構(gòu)造函數(shù)中的this
function Person(n, a, g){
  this.name = n;
  this.age = a;
  this.gender = g;
  console.log(this);
}
//作為構(gòu)造函數(shù)使用
var o = new Person("Lily", 18, "F"); //this為當(dāng)前對(duì)象 Person {name: "Lily", age: 18, gender: "F"}
//作為普通函數(shù)使用
Person("Lily", 18, "F"); //Window

第10行代碼將函數(shù)作為非構(gòu)造函數(shù)使用方式(new方式)調(diào)用,本文把這樣調(diào)用的函數(shù)稱為普通函數(shù)
上面代碼說(shuō)明一下幾點(diǎn):

用new創(chuàng)建對(duì)象的時(shí)候調(diào)用了構(gòu)造函數(shù)。

構(gòu)造函數(shù)和普通函數(shù)的區(qū)別在于調(diào)用方式,而不是定義方式,如果按第10行的方式調(diào)用,他就是個(gè)普通函數(shù),由于普通函數(shù)中的this是于Window,所以上面函數(shù)在第10行調(diào)用后創(chuàng)建了3個(gè)全局變量。

new關(guān)鍵字改變了函數(shù)內(nèi)this的指向,使其指向剛創(chuàng)建的對(duì)象。

function Person(n, a, g){
  this.name = n;
  this.age = a;
  this.gender = g;
  this.speak = function (){   //這里只是說(shuō)明this,實(shí)際應(yīng)該在prototype上定義對(duì)象方法
    console.log(this);
  };
}
//作為構(gòu)造函數(shù)使用
var o = new Person("Lily", 18, "F");
o.speak();  //Person {name: "Lily", age: 18, gender: "F"}
//作為普通函數(shù)使用
Person("Lily", 18, "F");
speak(); //Window

對(duì)象方法中的this同樣指向當(dāng)前對(duì)象

第14行之所以可以調(diào)用speak(),是因?yàn)榈?3行執(zhí)行后在全局創(chuàng)建了speak函數(shù),印證了之前的說(shuō)法。

多說(shuō)一句,為什么11行得到的是$Person{...}$,而不是$Object{...}$。其實(shí)這里顯示的本來(lái)就應(yīng)該是構(gòu)造函數(shù)的名字,如果你通過(guò)$var o = {};$創(chuàng)建的對(duì)象,相當(dāng)于$o = new Object();$,這時(shí)顯示的才是$Object{...}$

function Person(n, a, g){
  this.name = n;
  this.age = a;
  this.gender = g;
}
Person.prototype.speak = function (){   //這里只是說(shuō)明this,實(shí)際應(yīng)該在prototype上定義對(duì)象方法
  console.log(this);
};
//作為構(gòu)造函數(shù)使用
var o = new Person("Lily", 18, "F");
o.speak();  //this為當(dāng)前對(duì)象 Person {name: "Lily", age: 18, gender: "F"}
//作為普通函數(shù)使用
Person("Lily", 18, "F");
speak(); //ReferenceError: speak is not defined

由此可見prototype中的方法和構(gòu)造函數(shù)中直接定義方法中this是一樣的。
最后一行出現(xiàn)錯(cuò)誤,這個(gè)不難理解,這里不多說(shuō)了。
如果構(gòu)造函數(shù)有返回值呢?

function Person(n, a){
  this.name = n;
  this.age = a;
  return {
    name: "Lucy",
  };
}
var p1 = new Person("Bob", 10);
console.log(p1.name); //"Lucy"
console.log(p1.age);  //undefined

很明顯,這是對(duì)象p1中的this指向返回值對(duì)象
當(dāng)然,構(gòu)造函數(shù)還可以返回函數(shù):

function Fun(x){
  console.log(this);
  return function(){
    this.x = x;
    this.get = function(){
      alert(this.x);
    }
  }
}
var o1 = new Fun(2);   //Fun {}
var o2 = Fun(2);    //window
console.log(o1 == o2);   //false, 這里的o1,o2形式是一樣的,由于構(gòu)成閉包結(jié)構(gòu),所以應(yīng)用不同

但如果構(gòu)造函數(shù)返回了一個(gè)基本類型:

function Fun(n){
  this.name = n;
  return 2;
}
var o;
console.log(o = new Fun("Bob"));   // {name: "Bob"}

此時(shí)得到的對(duì)象和返回值無(wú)關(guān)。

到此我們就明白了,構(gòu)造函數(shù)的返回值如果是基本數(shù)據(jù)類型,那返回值和得到的對(duì)象無(wú)關(guān);否則,得到的對(duì)象就是返回值的引用并構(gòu)成閉包。

區(qū)分一下面這個(gè)具體問(wèn)題:



  
  


第一個(gè)按鈕得到Window,而第二個(gè)得到input元素!為什么!
再想想,click函數(shù)定義在全局,不在對(duì)象上。而btn.onclick = function(){}中的函數(shù)明顯是在btn對(duì)象上定義的。

對(duì)象方法中的閉包

說(shuō)閉包前先理解一個(gè)簡(jiǎn)單的:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    function fun(){
      console.log(this);
    }
    fun();
  }
};
o.speak();  //Window

什么,這里是Window了?對(duì)!我們仔細(xì)想想,這個(gè)fun函數(shù)是對(duì)象的方法嗎?顯然不是,它是個(gè)一般函數(shù)。它僅僅是在另一個(gè)函數(shù)中的一個(gè)函數(shù),顯然符合上文描述的:“凡是沒有定義在對(duì)象、構(gòu)造函數(shù)或prototype中的函數(shù),其中的this都是Window”
如果想在內(nèi)部函數(shù)訪問(wèn)這個(gè)對(duì)象,也很好解決:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    var _this = this; //首選_this,有的資料上會(huì)用self。
    function fun(_this){
      console.log(_this);
    }
    fun();
  }
};
o.speak();  //Object {name: "Lily", age: 18, gender: "F"}

下面做個(gè)閉包,為了說(shuō)明this的值,這里不定義太多變量,如果對(duì)閉包和作用域有疑惑可以參看博主的另一篇文章:Javascript 函數(shù)、作用域鏈與閉包

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    return function(){
      console.log(this);
    }
  }
};
o.speak()();  //Window

這個(gè)難理解嗎?返回的函數(shù)依然是個(gè)定義在別的函數(shù)里面的一般函數(shù)。如果想讓返回的函數(shù)可以繼續(xù)訪問(wèn)該對(duì)象,依然使用上面的$var _this = this$解決。不過(guò)這里引出了一個(gè)新的問(wèn)題:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    console.log(this);
  }
};
var fun = o.speak;
fun(); //Window

什么?這里還是Window!o.speak明顯是一個(gè)對(duì)象方法啊!那么問(wèn)題來(lái)了?第10行調(diào)用的是誰(shuí)?是fun函數(shù)。那么fun函數(shù)怎么定義的?對(duì),fun的定義決定它是一個(gè)一般函數(shù)。那怎么解決?這個(gè)不用解決,沒人會(huì)試圖在對(duì)象外獲取對(duì)象方法,即便是有需要也應(yīng)該獲取對(duì)象方法內(nèi)的閉包。當(dāng)然,如果你要強(qiáng)行解決它,那就用bind方法吧。

原型中的this

什么?原型方法中的this? 看看下面代碼就明白了,這個(gè)理解起來(lái)不會(huì)很難

function F(){
  return F.prototype.init();
}
F.prototype = {
  init: function(){
    return this;
  },
  test: "test"
}
var f = F();
console.log(f); //F{test:test}

可見,原型中方法里的this.就是一個(gè)該構(gòu)造函數(shù)的實(shí)例化對(duì)象。jQuery中使用的就是這個(gè)構(gòu)造方法。

bind call和apply方法

這3個(gè)方法用來(lái)改變調(diào)用函數(shù)內(nèi)的this值

bind方法

將對(duì)象綁定到函數(shù),返回內(nèi)部this值為綁定對(duì)象的函數(shù)。
如果我們不能修改庫(kù)中對(duì)象的方法,我們就不能用$var \_this = this;$的方法改變this值,那么我們換個(gè)角度考慮上面的問(wèn)題:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    return function(){
      console.log(this);
    }
  }
};
o.speak()();  //Window

最后一行中,o.speak()執(zhí)行完后得到一個(gè)函數(shù),這是個(gè)臨時(shí)函數(shù),定義在全局作用域,如果我們把這個(gè)臨時(shí)函數(shù)綁定到o對(duì)象上,再繼續(xù)調(diào)用這個(gè)函數(shù)不就可以了么:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    return function(){
      console.log(this);
    }
  }
};
o.speak().bind(o)();  //Object {name: "Lily", age: 18, gender: "F"}

bind不只可以傳入一個(gè)參數(shù),后面的多個(gè)參數(shù)可以作為返回函數(shù)的綁定參數(shù),如下:

function add(a, b){
  console.log(a+b);
  return a+b;
}

var add2 = add.bind(null, 2); //參數(shù)順序保持一致,第一參為null,不改變this值(但這里會(huì)改變,因?yàn)閍dd2在全局中定義)
add2(4); //6

可如果是構(gòu)造函數(shù)呢?記住一點(diǎn),函數(shù)作為構(gòu)造函數(shù)調(diào)用時(shí),bind的第一參數(shù)無(wú)效,注意,僅僅是第一參數(shù)無(wú)效。

function Person(pname, page){
  this.name = pname;
  this.age = page;
}
var Person2 = Person.bind({name:"hello",city:"Beijing"}, "world");
var p = new Person2(12);
console.log(p);//Person{name:"world", age:12}
call方法 和 apply方法

這里舉幾個(gè)和上文不一樣的例子

function Animal(){
    this.name = "Animal";
}
Animal.prototype.showName = function(){
    alert(this.name);
};

function Cat(){
    this.name = "cat";
}
var cat = new Cat();

這里Cat沒有showName方法,怎么實(shí)現(xiàn)輸出名字呢?
有c++和java經(jīng)驗(yàn)的人會(huì)認(rèn)為貓屬于動(dòng)物,所以Cat應(yīng)該繼承Animal,所以我們可以這樣修改:

function Animal(){
    this.name = "Animal";
}
Animal.prototype.showName = function(){
    alert(this.name);
};

function Cat(){
    this.name = "cat";
}
Cat.prototype = Animal.prototype;
var cat = new Cat();
cat.showName(); //Cat

或者:

function Animal(){
    this.name = "Animal";
}
Animal.prototype.showName = function(){
    alert(this.name);
};

function Cat(){
  Animal.call(this, "cat");  //繼承
}
var cat = new Cat();
cat.showName(); //Cat

有c++和java經(jīng)驗(yàn)就會(huì)知道,在做一個(gè)大型項(xiàng)目之前都是要做UML設(shè)計(jì)的,用例圖、活動(dòng)圖、類圖、狀態(tài)圖等等十幾種圖,對(duì)于沒有一定經(jīng)驗(yàn)的開發(fā)者做這個(gè)簡(jiǎn)直就是噩夢(mèng),而js把各種類或模塊獨(dú)立出來(lái),需要的時(shí)候用call、bind、apply把多個(gè)類聯(lián)系起來(lái),這樣的做法即簡(jiǎn)化了設(shè)計(jì),又簡(jiǎn)化了維護(hù)。
所以js里面很少有上面的寫法,怎么寫看下面:

function Animal(){
    this.name = "Animal";
}
Animal.prototype.showName = function(){
    alert(this.name);
}

function Cat(){
    this.name = "Cat";
}
var cat = new Cat();
Animal.prototype.showName.call(cat);   //cat
Animal.prototype.showName.apply(cat);   //cat

對(duì),不過(guò)感覺那里怪怪的,call和apply一樣?他們功能上一樣,只是接受的參數(shù)不同,簡(jiǎn)單寫就是下面這樣:

func.call(func1,var1,var2,var3,...);
func.apply(func1,[var1,var2,var3,...]);

它們的第一個(gè)參數(shù)都是指定調(diào)用該函數(shù)的對(duì)象,如果為空就是全局對(duì)象。后面的時(shí)傳入該函數(shù)的參數(shù),區(qū)別在于使用call時(shí)參數(shù)逐一傳入,而使用apply時(shí)參數(shù)構(gòu)成一個(gè)數(shù)組或類數(shù)組對(duì)象傳入

實(shí)例

例子1:

//求下列數(shù)組元素的最大值
var numbers = [5, 6, 9, 3, 7];
var maxValue = Math.max(numbers);
alert(maxValue);  //NaN
maxValue = Math.max.apply(null, numbers);
alert(maxValue);  //9

//否則你只能這么寫:
var max = +Infinity;
for (var i = 0, len = numbers.length; i < len; i++) {
  if (numbers[i] > max)
    max = numbers[i];
}

例子2

//自定義typeof函數(shù)(注意,系統(tǒng)自帶的typeof是運(yùn)算符,不是函數(shù))
function typeOf(o){
  return Object.prototype.toString.call(o).slice(8,-1);
}
//自定義typeOf函數(shù)測(cè)試
console.log(typeOf (2.1));  //Number
console.log(typeOf (undefined));  //Undefined
console.log(typeOf ({}));  //Object
console.log(typeOf ("hello"));  //String
console.log(typeOf (false));  //Boolean
console.log(typeOf (typeOf));  //Function
console.log(typeOf (null));  //Null
console.log(typeOf ([]));  //Array
console.log(typeOf (new Date));  //Date
console.log(typeOf (/d/));  //RegExp
console.log(typeOf (document.  getElementsByTagName("body")[0]));  //HTMLBodyElement

//系統(tǒng)typeof運(yùn)算符測(cè)試
console.log(typeof (2.1));  //number
console.log(typeof (undefined));  //Undefined
console.log(typeof ({}));  //object
console.log(typeof ("hello"));  //string
console.log(typeof (false));  //boolean
console.log(typeof (typeOf));  //function
console.log(typeof (null));  //object
console.log(typeof ([]));  //object
console.log(typeof (new Date));  //object
console.log(typeof (/d/));  //object
console.log(typeof (document.  getElementsByTagName("body")[0]));  //object

//明顯比系統(tǒng)自己的實(shí)用多了

例子3

//把類數(shù)組對(duì)象轉(zhuǎn)為數(shù)組(類數(shù)組對(duì)象就是屬性key為0,1,2,...,還具有一個(gè)key為length的可以像數(shù)組一樣動(dòng)態(tài)改變的值的對(duì)象)
function(){
  return Array.prototype.slice.call(arguments);
}

例子4

//用js訪問(wèn)元素偽類
function getRuleSelector(selector){

  return Array.prototype.filter.call(getCssList(), function(x){
    return pure(x.selectorText) === pure(selector);
  });

  function pure(selector){
    selector.replace(/::/g, ":");   //把雙冒號(hào)替換為單冒號(hào)
  }

  function getCssList(){
    return Array.prototype.concat.apply([], Array.prototype.map.call(document.styleSheets, function(x){
      return Array.prototype.slice.call(x.cssRules);
    }));
  }
}

例子5

//為每個(gè)DOM元素注冊(cè)事件
Array.prototype.forEach.call(document.querySelectAll("input[type=button]"), function(ele){
  ele.addEventLister("click", fun, false);
});

例子6

//自定義forEach函數(shù)遍歷Dom元素列表(類數(shù)組對(duì)象)
var forEach = Function.prototype.call.bind(Array.prototype.forEach);

DOMElementList = document.getElementByTagName("li");
forEach(DOMElementList, function (el) {
  el.addEventListener("click", handle);   //handle定義省略
});
箭頭函數(shù)中的this

之所以最后說(shuō)箭頭函數(shù),一方面因?yàn)檫@是ES6中的內(nèi)容,更重要的時(shí)因?yàn)榧^函數(shù)中的this永遠(yuǎn)不能被call, bind和apply改變,也就是說(shuō)箭頭函數(shù)中的this可不改變,僅僅與其定義的位置有關(guān)。

箭頭函數(shù)的最大特點(diǎn)是:它不改變this的作用域(上下文環(huán)境),但是依然構(gòu)成局部作用域,我們之前遇到過(guò)閉包內(nèi)this值被改變的問(wèn)題,我們用重新定義局部變量的方式解決了這個(gè)問(wèn)題。如果有了箭頭函數(shù),解決這個(gè)問(wèn)題就簡(jiǎn)單多了

這是上面出現(xiàn)過(guò)的一段代碼:

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    function fun(){
      console.log(this);
    }
    fun();
  }
};
o.speak();  //window

看看用箭頭函數(shù)函數(shù)怎優(yōu)雅的解決這個(gè)問(wèn)題

var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    (() => {console.log(this);})(); //一個(gè)立即執(zhí)行的箭頭函數(shù)
  }
};
o.speak();  //Object {name: "Lily", age: 18, gender: "F"}

或者這樣也可以:

  var o = {
  name: "Lily",
  age: 18,
  gender: "F",
  speak: function (){
    return () => {console.log(this);}; //返回一個(gè)箭頭函數(shù)
  }
};
o.speak()();  //Object {name: "Lily", age: 18, gender: "F"}
with

with 可以改變上下文環(huán)境,實(shí)際開發(fā)中十分不建議使用 with, 但關(guān)于 with 這里簡(jiǎn)單說(shuō)明一下,看一個(gè)示例:

var a, x, y;
var r = 10;

with (Math) {
  a = round(PI * r * r);
  x = r * cos(PI);
  y = r * sin(PI / 2);
}

console.log(a, x, y);  //314 -10 10

但是如果在 with 內(nèi)直接聲明變量會(huì)發(fā)生什么:

var obj = {
  name: "test"
};

with(obj){   //內(nèi)部定義的變量都注冊(cè)在 obj 上
  name = "hello";
  var salary = 10000;
  age = 20;
}

console.log(obj.name);     //"hello"
console.log(obj.age);      //undefined
console.log(age);   //20, 如果對(duì)象不具有這個(gè)屬性,該定義會(huì)意外的出現(xiàn)在 全局變量中
console.log(obj.salary);      //undefined
console.log(salary);   //10000, 如果對(duì)象不具有這個(gè)屬性,該定義會(huì)意外的出現(xiàn)在 全局變量中

文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/97462.html

相關(guān)文章

  • JavaScript深入淺出

    摘要:理解的函數(shù)基礎(chǔ)要搞好深入淺出原型使用原型模型,雖然這經(jīng)常被當(dāng)作缺點(diǎn)提及,但是只要善于運(yùn)用,其實(shí)基于原型的繼承模型比傳統(tǒng)的類繼承還要強(qiáng)大。中文指南基本操作指南二繼續(xù)熟悉的幾對(duì)方法,包括,,。商業(yè)轉(zhuǎn)載請(qǐng)聯(lián)系作者獲得授權(quán),非商業(yè)轉(zhuǎn)載請(qǐng)注明出處。 怎樣使用 this 因?yàn)楸救藢儆趥吻岸耍虼宋闹兄豢炊?8 成左右,希望能夠給大家?guī)?lái)幫助....(據(jù)說(shuō)是阿里的前端妹子寫的) this 的值到底...

    blair 評(píng)論0 收藏0
  • JavaScriptthis詳解

    摘要:作為構(gòu)造函數(shù)調(diào)用中沒有類,但是可以從構(gòu)造器中創(chuàng)建對(duì)象,并提供了運(yùn)算符來(lái)進(jìn)行調(diào)用該構(gòu)造器。構(gòu)造器的外表跟普通函數(shù)一樣,大部分的函數(shù)都可以當(dāng)做構(gòu)造器使用。如果構(gòu)造函數(shù)顯式的返回一個(gè)對(duì)象,那么則會(huì)指向該對(duì)象。 this 的指向 this 是 js 中定義的關(guān)鍵字,它自動(dòng)定義于每一個(gè)函數(shù)域內(nèi),但是它的指向卻讓人很迷惑。在實(shí)際應(yīng)用中,this 的指向大致可以分為以下四種情況。 1.作為普通函數(shù)調(diào)...

    cyrils 評(píng)論0 收藏0
  • JavaScriptthis對(duì)象詳解

    摘要:再來(lái)看一個(gè)小的示例淘寶騰訊淘寶為什么輸出的依然是淘寶呢調(diào)用的是對(duì)象中的方法,方法里面有一個(gè)定時(shí)器,而定時(shí)器的一個(gè)參數(shù)是這里的指的就是的對(duì)象,然后方法里面有調(diào)用了,但是定時(shí)器中的指的是對(duì)象,所以最終調(diào)用的是對(duì)象中。 1.看前熱身 看一段代碼 var name = javascript; var obj = { name:js, foo:f...

    Integ 評(píng)論0 收藏0
  • javascript this指針詳解

    摘要:但是有一個(gè)總的原則,那就是指的是,調(diào)用函數(shù)的那個(gè)對(duì)象使用主要分四種情況,討論下指針的用法和注意事項(xiàng)一純粹的函數(shù)調(diào)用這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此就代表全局對(duì)象。 this是Javascript語(yǔ)言的一個(gè)關(guān)鍵字它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,隨著函數(shù)使用場(chǎng)合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)...

    graf 評(píng)論0 收藏0
  • javascript this指針詳解

    摘要:但是有一個(gè)總的原則,那就是指的是,調(diào)用函數(shù)的那個(gè)對(duì)象使用主要分四種情況,討論下指針的用法和注意事項(xiàng)一純粹的函數(shù)調(diào)用這是函數(shù)的最通常用法,屬于全局性調(diào)用,因此就代表全局對(duì)象。 this是Javascript語(yǔ)言的一個(gè)關(guān)鍵字它代表函數(shù)運(yùn)行時(shí),自動(dòng)生成的一個(gè)內(nèi)部對(duì)象,只能在函數(shù)內(nèi)部使用,隨著函數(shù)使用場(chǎng)合的不同,this的值會(huì)發(fā)生變化。但是有一個(gè)總的原則,那就是this指的是,調(diào)用函數(shù)的那個(gè)對(duì)...

    AlphaWallet 評(píng)論0 收藏0
  • javaScript原型及原型鏈詳解(二)

    摘要:當(dāng)然這還沒完,因?yàn)槲覀冞€有重要的一步?jīng)]完成,沒錯(cuò)就是上面的第行代碼,如果沒有這行代碼實(shí)例中的指針是指向構(gòu)造函數(shù)的,這樣顯然是不對(duì)的,因?yàn)檎G闆r下應(yīng)該指向它的構(gòu)造函數(shù),因此我們需要手動(dòng)更改使重新指向?qū)ο蟆? 第一節(jié)內(nèi)容:javaScript原型及原型鏈詳解(二) 第一節(jié)中我們介紹了javascript中的原型和原型鏈,這一節(jié)我們來(lái)講利用原型和原型鏈我們可以做些什么。 普通對(duì)象的繼承 ...

    widuu 評(píng)論0 收藏0

發(fā)表評(píng)論

0條評(píng)論

最新活動(dòng)
閱讀需要支付1元查看
<