菜鳥級別的選手,學習+意會。歡迎指正
http://uule.iteye.com/blog/1158829 http://blog.csdn.net/myhahaxiao/article/details/6952321
call方法: 語法:call([thisObj[,arg1[, arg2[, [,.argN]]]]])
apply方法: 語法:apply([thisObj[,argArray]])
第一個參數。就是你用來替換函數中的this的那個對象。
由于apply,call是定義在Function.PRototype上的,所以,只要是函數都可以調用這兩個方法(原型鏈)。
 123456789
123456789作用:Apply,與call的作用都是一樣:更改函數內部的this,讓它指向第一個參數。
上面的小例子展示了call的基本用法。前面f視為一個對象,他使用對象的call()方法,參數為3個。上面小例子中只有一個參數 我們可以粗劣的把f.call(obj);視作執行f(1,2);,有了call方法后,f函數中所有的this都指向了obj對象。
 123456789
123456789兩者區別在于參數的寫法不同.上面的代碼和小例子的代碼作用一樣 apply只有兩個參數,而call可寫多個參數。apply()方法的第一個參數為一個對象,第二個參數為一個數組或類數組對象(由以前的知識可知函數即對象,函數也有自己的方法)。 為什么要同時有 call 和 apply 方法呢? 在js中有一個只存在于函數中的類數組對象arguments.在一些情況下可以直接使用apply()方法
 12345678910111213141516171819
12345678910111213141516171819從上面例子看: 1.代碼是從new Student(“qian”,21,”一年級”);這一句開始執行的。 2.用new創建了一個新對象student. 同時也調用了函數function Student(name,age,grade)。 3.運行Person.apply(this,arguments); ,可以視作Person(arguments );在apply方法里,其中 this指向了新創建的對象。于是Person函數中的this就指向了student.(arguments就是一個類數組對象)。于是Student就有了Person的屬性和方法。
從某些特性來看,這就是js中的繼承。
1.利用Math.max求數組中的最大值 Math.max 參數里面不支持Math.max([param1,param2]) 也就是數組。 可以使用
var min = Math.min.apply(null, [10,8,9,7,1]);console.log(min);12 12
122.判斷數據類型 借用了Object.prototype.toString
var a = []; var b = function(){}; var c = {}; var d = null; var e = 1; console.log( Object.prototype.toString.call(a) ); //[object Array] console.log( Object.prototype.toString.call(b) ); //[object Function] console.log( Object.prototype.toString.call(c) ); //[object Object] console.log( Object.prototype.toString.call(d) ); //[object Null] console.log( Object.prototype.toString.call(e) ); //[object Number]12345678910 12345678910
123456789103.實現字符串的翻轉
var str = 'abcdefghijk'; String.prototype.reverse = function(){ return Array.prototype.reverse.call(this.split('')).join(''); } console.log( str.reverse() );12345 12345
12345注意:上面兩個運用了原型鏈的知識。
(function () {('pre.prettyprint code').each(function () { var lines =新聞熱點
疑難解答