var Person = Function(name){ this.name = name } var p = new Person; // new操做符作了如下三件事 var p = {}; // 建立了一个空对象 p.__proto__ = Person.prototype; // 将这个对象的 __proto__成员指向了Person.prototype Person.call(p); // 将Person函数的this指针指向换成p,而后在调用Person函数
一、都是用来改变函数的this对象的指向的。
二、第一个参数都是this要指向的对象。
三、均可以利用后续参数传参。javascript
片断一 var xw = { name:'小王', gender:'男', aage:24, say: function(){ alert(this.name + " , " + this.gender + " ,今年" + this.age) } } var xz = { name:'小张', gender: '男', age:25 } xw.say()
片断一,显示为:小王,男,今年24岁。java
那么如何用wx的say方法来显示xz的数据呢?数组
一、call的用法:xw.say.call(xh)app
二、apply的用法:xw.say.apply(xh)函数
三、bind的用法:xw.say.bind(xh)();this
看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,所以后面还须要()来进行调用才能够。spa
将例子稍加改造prototype
片断二 var xw = { name : "小王", gender : "男", age : 24, say : function(school,grade) { alert( this.name + " , " + this.gender + " ,今年" + this.age + " ,在" + school + "上" + grade); } } var xz = { name : "小张", gender : "女", age : 25 }
一、call的用法:xw.say.call(xz,''实验小学','六年级') // 小张,女,今年25,在实验小学上六年级。指针
二、apply的用法:xw.say.apply(xz,['实验小学','六年级']) // 小张,女,今年25,在实验小学上六年级。code
三、bind的用法:
至于对于何时用什么方法,其实不用纠结。若是你的参数原本就是存在于一个数组中,那天然用apply,若是参数之间没有什么关联,就用call。
for(i=0, j=0; i<10, j<6; i++, j++){ k = i + j; } //5+5,返回10
for(i=0, j=0; i<2, j<8; i++, j++){ k = i + j; } //7+7,返回14
alert("警告"); // 显示“肯定”,返回undefined confirm("肯定要清空数据吗?"); //显示“取消”和“肯定”,返回false或者true prompt('请输入数字',''); //显示输入框和空白输如框,有“取消”和“肯定”按钮,返回null或者输入的内容
5、javascript的3种主要类型、2种复合类型、3种特殊类型
主要类型:string、number、boolean
复合类型:function、object
特殊类型:null、undefind