国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 網站 > WEB開發 > 正文

js中call()與apply()方法

2024-04-27 15:04:05
字體:
來源:轉載
供稿:網友

菜鳥級別的選手,學習+意會。歡迎指正

參考文章

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上的,所以,只要是函數都可以調用這兩個方法(原型鏈)。

小例子

var obj = { name : 'hanker' }; function f(a,b){ console.log(this.name); //hanker console.log(a); //1 console.log(b); //2 } f.call(obj,1,2);123456789123456789

作用:Apply,與call的作用都是一樣:更改函數內部的this,讓它指向第一個參數。

上面的小例子展示了call的基本用法。前面f視為一個對象,他使用對象的call()方法,參數為3個。上面小例子中只有一個參數 我們可以粗劣的把f.call(obj);視作執行f(1,2);,有了call方法后,f函數中所有的this都指向了obj對象。

call與apply區別

var obj = { name : 'hanker' }; function f(a,b){ console.log(this.name); //hanker console.log(a); //1 console.log(b); //2 } f.apply(obj,[1,2]);123456789123456789

兩者區別在于參數的寫法不同.上面的代碼和小例子的代碼作用一樣 apply只有兩個參數,而call可寫多個參數。apply()方法的第一個參數為一個對象,第二個參數為一個數組或類數組對象(由以前的知識可知函數即對象,函數也有自己的方法)。 為什么要同時有 call 和 apply 方法呢? 在js中有一個只存在于函數中的類數組對象arguments.在一些情況下可以直接使用apply()方法

常用實例

<script type="text/javascript"> /*定義一個人類*/ function Person(name,age) { this.name=name; this.age=age; } /*定義一個學生類*/ function Student(name,age,grade) { Person.apply(this,arguments); this.grade=grade; } //創建一個學生類 var student=new Student("qian",21,"一年級"); //測試 alert("name:"+student.name+"/n"+"age:"+student.age+"/n"+"grade:"+student.grade); //name:qian age:21 grade:一年級</script>1234567891011121314151617181912345678910111213141516171819

從上面例子看: 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);1212

2.判斷數據類型 借用了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]1234567891012345678910

3.實現字符串的翻轉

var str = 'abcdefghijk'; String.prototype.reverse = function(){ return Array.prototype.reverse.call(this.split('')).join(''); } console.log( str.reverse() );1234512345

注意:上面兩個運用了原型鏈的知識。

(function () {('pre.prettyprint code').each(function () { var lines = (this).text().split(′/n′).length;varnumbering = $('').addClass('pre-numbering').hide(); (this).addClass(′has?numbering′).parent().append(numbering); for (i = 1; i
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 搜索| 琼中| 东平县| 讷河市| 山阴县| 图们市| 恩施市| 天水市| 齐齐哈尔市| 蓝田县| 保康县| 禄丰县| 寿宁县| 天全县| 东至县| 额敏县| 彭泽县| 娱乐| 嵩明县| 绥中县| 哈巴河县| 资阳市| 察雅县| 沭阳县| 聂荣县| 大连市| 班戈县| 谢通门县| 广东省| 台中县| 江油市| 卢湾区| 灌阳县| 荆州市| 瑞昌市| 长治市| 琼结县| 广东省| 长沙市| 太保市| 赞皇县|