代码模块
1:js里面代码可以放在不同的文件里,称为代码模块;
2:一个模块需要引用其它模块代码的时候使用 require;
3: require:
(1) 如果是第一次调用,那么就加载,执行脚本;
(2) 每个代码模块由module.exports 导出的对象;
(3) 每次require的时候,都返回module.exports;
(4)如果不是第一次执行,那么直接返回module.exports;
this
1:function.call(this, param1, param2);
2:表.函数名(参数):
(1) 在函数里面 有一个this对象,指的是外面的表;
(2) 如果外面没有表,那么this为undefine;
(3) 函数.bind(数据对象),会产生一个新的函数对象,调用这个函数的this,就是外面bind的对象;
显示和隐式调用与强制传递this
bind
强制绑定(bind)的优先级高于显示绑定
做回调函数的时候都是通过强制bind,强制bind this,优先级比其它的都高;
显示绑定高于隐式绑定
this 有什么用呢?
javascript都是动态的借助于 Function+This 实现面向对象,没有象Java,c#,……..真真正正的实现面向对象,this就更象我们面向对象的思维,观察下面代码,更象-面向对象的(类,实例)、属性,方法。完全借助于This实现了面向对象;
原型引用
1:每个函数对象都有prototype属性;
2: clone一个函数对象的prototype;
(1)定义一个空函数;
(2)空函数的prototype = 函数对象的prototype;
(3) 新构造函数.prototype = new 空函数();
//step1 var data = {};
//step2 data.__proto__:prototype 的浅复制
//step3 实例 作为this,传递给后面的函数
//step4 调用这个函数;
new 与构造函数
上面的(原型引用) data 是一张表(字典);
1: js 构造函数: 普通的函数(参数),一般和类的名字是一样的;
2: new +构造(参数1, 参数2....);
(1)先创建一个{}对象;
(2)将这个新对象绑定到函数里面的this;
(3)构造函数对象的prototype 复制给新对象的 __proto__
(4) 返回新创建的对象;
3: 表.函数调用搜索顺序,现在key, value里查找,再到__proto__里找;
this之---浅拷贝(浅复制),new
定义一个类
以上的定义很基础很底层,而且还很蛋疼的逻辑,但是它是很多语言通用的逻辑……….但必须深入的了解,往下继承,我们再将这个—–类封装一下。
为接下来的游戏开发打下牢牢的基础
js实现继承
继承是什么意思呢?实际上就是写了上面人的(类)的代码,完了不想再写,我们已经写了人的(类),再想写出男人的(类)
那么我们就需要使用继承
1: 子类clone 基类构造函数的prototype;
2: 子类和基类如果有同名的方法,会现在当前这个类的函数;
如果想打印同名基类的方法呢???
3: 子类的实例显示的调用基类的函数
基类.prototype.函数名字.call(实例, 参数1,参数2);
以上是最底层,最基础的类,写起来很蛋疼......我们可以将类进一步封装
4: 编写一个Class()方法来定义一个类,让它继承基类;