一、new操作符具体干了什么?
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函数
二、call 、apply和bind的区别
(一)、相似之处:
1、都是用来改变函数的this对象的指向的。
2、第一个参数都是this要指向的对象。
3、都可以利用后续参数传参。
(二)、区别:
片段一
var xw = {
name:'小王',
gender:'男',
aage:24,
say: function(){
alert(this.name + " , " + this.gender + " ,今年" + this.age)
}
}
var xz = {
name:'小张',
gender: '男',
age:25
}
xw.say()
片段一,显示为:小王,男,今年24岁。
那么如何用wx的say方法来显示xz的数据呢?
1、call的用法:xw.say.call(xh)
2、apply的用法:xw.say.apply(xh)
3、bind的用法:xw.say.bind(xh)();
看到区别了吗?call和apply都是对函数的直接调用,而bind方法返回的仍然是一个函数,因此后面还需要()来进行调用才可以。
(三)、call和apply的区别
将例子稍加改造
片段二
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
}
1、call的用法:xw.say.call(xz,''实验小学','六年级') // 小张,女,今年25,在实验小学上六年级。
2、apply的用法:xw.say.apply(xz,['实验小学','六年级']) // 小张,女,今年25,在实验小学上六年级。
3、bind的用法:
- xw.say.bind(xz,"实验小学","六年级")();
- xw.say.bind(xz)("实验小学","六年级");
总结:
至于对于什么时候用什么方法,其实不用纠结。如果你的参数本来就是存在于一个数组中,那自然用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
四、js中3中弹窗的消息提醒(警告窗口、确认窗口、信息输入窗口)
alert("警告"); // 显示“确定”,返回undefined
confirm("确定要清空数据吗?"); //显示“取消”和“确定”,返回false或者true
prompt('请输入数字',''); //显示输入框和空白输如框,有“取消”和“确定”按钮,返回null或者输入的内容
五、javascript的3种主要类型、2种复合类型、3种特殊类型
主要类型:string、number、boolean
复合类型:function、object
特殊类型:null、undefind
来源:oschina
链接:https://my.oschina.net/u/3502206/blog/3042011