js中不是所有花括号(if,while等)都能创建作用域,只有函数语句中的花括号才能创建
内存作用域和对象
1 | var makeArray = function() { |
闭包。比如functionA存在functionB中,functionA持有functionB的变量x。在functionB执行完成后返回functionA,functionA仍然可以调用x进行执行。
1 | var sagas = []; |
this
关键字
1) this
所绑定的对象1
2
3
4
5
6
7var obj = {
fn: function(a,b) {
log(this);
}
};
//var ob2 = {method:obj.fn}
obj.fn(3,4); //this->obj(this绑定obj对象。但如果没有点符号,将绑定成全局变量)
2) this
在大部分重要的用法中都以参数的形式出现
3) this
绑定window对象
1 | var fn = function(x,y) { |
4) 想要this指向你想绑定的对象。需要使用.
符号或使用内置的.call
方法。以及new。
原型链(prototype)
1 | var gold = {a:1}; |
对象修饰模式
经常用于向某个已拥有了某些功能的对象添加功能
1 | var carlike = function(obj, loc) { |
函数类
1 | var Car = function(loc) { |
函数共享模式改造,减少每次move函数的创建1
2
3
4
5
6
7
8
9var Car = function(loc) {
var obj = {loc: loc};
obj.move = move;
return obj;
}
var move = function() {
this.loc++;
};
如果方法较多,可以
1 | var Car = function(loc) { |
原型类
1 | var Car = function(loc) { |
构造函数原型
1 | var Car = function(loc) { |
伪类模式
1 | var Car = function(loc) { |
超类和子类
1 | var Car = function(loc) { |
伪类子类
Object.create在创建复制对象时,没有创建constructor。
1 | var Car = function(loc) { |