只有执行力的叫三级工程师
Javascript
闭包
函数可以访问它被创建时所处的上下文环境,这叫做闭包。
函数(function)与对象
JS中一切皆对象,function就是对象。
this
1.当一个函数被保存为对象的一个属性时,我们称它为一个方法。当一个方法被调用时this被绑定到该对象。(这是个比较正常的情况)
2.函数不作为对象的属性,也就是当做函数来调用的时候,函数内部的this被绑定到全局变量。
3.(构造器调用模式)
var Que = function(string){
this.status = string;
}
这时跟第一种情况差不多,是比较正常的情况。
apply()和call()两个方法
栗子:对象1.方法.apply(对象2 , …)
这两个方法的作用一样,只是参数的形式不一样。都是将对象2与对象1替换。
这个方法体中的this
原来都是指向的对象1(也可能指向全局标量windows),apply
以后方法体中的this指向的就编程对象2了。
手写bind()
Function.prototype.bind = function(that){
var method = this,
slice = Array.prototype.slice;
args = slice.apply(arguments,[1]);
return function(){
return method.apply(that,args.concat(slice.apply(arguments,[0])));
};
};
var x = function(){
return this.value;
}.bind({value:666});
alert(x());// 666
// 书上抄的,还没有完全了理解...
对象的属性
Person.name与Person[name]这种写法等价。
JQuery
扩展/插件
JQuery扩展分两种:
1.对JQuery本身的扩展
调用如$.foo();
2.对JQuery所选对象扩展方法
调用如$('#myF').foo();
对JQuery本身的扩展
写法如下:
$.foo = function(){
alert("foo");
}
//调用方法
$.foo();
$.extend({
foo:function(){
alert("foo");
},
bar:function(){
alert("bar");
}
})
//调用方法
$.foo();
$.bar();
$.myPlugin = {
foo:function(){
alert("foo");
},
bar:function(){
alert("bar");
}
}
//调用方法
$.myPlugin.foo();
$.myPlugin.bar();
对JQuery所选对象扩展方法
写法如下:
$.fn.foo = function(){
alert("hello jquery");
}
$('#myF').foo()
(function($){
$.fn.extend({
pluginName:function(opt,callback){
alert("foo");
}
})
})(jQuery);
$("#myF").pluginName();
(function (jq) {
jq.fn.foo = function (obj) {
alert(obj);
};
})(jQuery)
$("#myF").foo("hello jquery");
……