javascript
JavaScript call,apply和prototype的介绍,区别
----這三個概念會在實現(xiàn)js繼承中使用到
1.call和apply
call和apply的作用基本類似,都是去執(zhí)行function并將這個function的context替換成第一個參數(shù)帶入。兩者的不同是call必須將function的參數(shù)一一帶入,而apply只要在第二個參數(shù)帶入一個數(shù)列。
1 function fn(arg1,arg2,arg3,...){ 2 //do something 3 } 4 5 fn(arg1,arg2,...); 6 7 fn.call(context,arg1,arg2,...); 8 9 fn.apply(context,[arg1,arg2,...]);call方法調(diào)用一個對象的一個方法,以另一個對象替換當(dāng)前對象。
call([thisObj[arg1[,arg2[,...[,argN]]]]])
參數(shù):thisObj可選,用作當(dāng)前對象的對象;arg1,arg2,...argN可選,將被傳遞方法參數(shù)序列。
如果沒有提供thisObj,那么Global對象將被用作thisObj。
var func=new function(){this.a="func"};var newfunc=function(x){var a="newfunc";console.info(this.a);console.info(x); };newfunc.call(func,"hello world");//output:func hello world?
2.prototype
?JavaScript沒有子類和父類的概念,靠原型鏈(prototype chain)模式來實現(xiàn)繼承。
prototype是構(gòu)造函數(shù)的一個屬性。
所有實例對象需要共享的屬性和方法,都放在這個prototype對象里面;那些不需要共享的屬性放在構(gòu)造函數(shù)里。
實例對象一旦創(chuàng)建,將自動引用prototype對象的屬性和方法。實例對象的屬性和方法分兩種,一種是共享的,另一種是本地自己的。
1 //example 1 2 function Person(name){ 3 this.name=name; 4 } 5 6 var person1=new Person('Mike'); 7 var person2=new Person('Linda'); 8 person2.gender='female'; 9 console.info(person1.gender);//undefinded 10 console.info(person2.gender);//female 1112 //example 2 13 function Person(name){ 14 this.name=name; 15 } 16 17 Person.prototype.gender='male'; 18 var person1=new Person('Mike'); 19 var person2=new Person('Linda'); 20 person2.gender='female'; 21 console.info(person1.gender);//male 22 console.info(person2.gender);//female
比較上面兩個例子就知道了。
?
轉(zhuǎn)載于:https://www.cnblogs.com/deric/p/7081557.html
總結(jié)
以上是生活随笔為你收集整理的JavaScript call,apply和prototype的介绍,区别的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 自己写的几个常用到的函数
- 下一篇: Elasticsearch的前后台运行与