今天是2018/07/02, 今天继续带大家走进 js 底层的设计模式 , 作为一个web工程师,我想次面试,都会问道
html 、js 、css 、这些基本的知识点,很少问到他的设计模式,
JavaScript 没有提供传统面向对象语言中的类式继承,而是通过原型委托的方式来实现对象与对象
之间的继承。JavaScript 也没有在语言层面提供对抽象类和接口的支持。正因为存在这些跟传统面向
对象语言不一致的地方,我们在用设计模式编写代码的时候,更要跟传统面向对象语言加以区别。
1.基础知识
编程语言按照数据类型大体可以分为两类,一类是静态类型语言,另一类是动态类型语言。静态类型语言在编译时便已确定
变量的类型,而动态类型语言的变量类型要到程序运行的时候,待变量被赋予某个值之后,才会具有某种类型。
在面向对象的开发模式用,我通常要了解 面向对象的三大特点 , 封装、继承、多态.
封装:是将信息封装在函数内部 ,将信息隐藏起来(利用的闭包和函数的作用域);
继承:是指通原型模式 prototype 来实现 类的继承
多态:同一操作作用于不同的对象上面,可以产生不同的解释和不同的执行结果
示例1
function Person( name ){
this.name = name;
};
Person.prototype.getName = function(){
return this.name;
};
console.log( a.name ); // 输出:sven
console.log( a.getName() ); //输出:sven
console.log( Object.getPrototypeOf( a ) === Person.prototype );// 输出:true
2. ES6新增变量声明方式和类定义
在es6 中提供了 private、public、protected 等关键字来提供不同的访问权限.另外还有const来定义常量
public 公开(public)方法 、private 私有(private)变量、protected 只有在派生类中才能访问
const 定义常量 一但确定 就不能在改变.
ECMAScript 6 中提供的 let 定义临时变量,
ECMAScript 6 带来了新的 Class 语法。
示例如下:
class Animal {
constructor(name) {
this.name = name;
}
getName() {
return this.name;
}
}
3. this 关键字
在 JavaScript 编程中,this 关键字总是让初学者感到迷惑,Function.prototype.call 和Function.prototype.apply
这两个方法也有着广泛的运用。
1、 指向Windows
2.、指向构造函数或者是当前实例
3、 指向函数体
4、 指向object
基本上包含来80%的this指向问题 ,当然也有this指针丢失的这种情况
示例如下
var obj = {
myName: 'sven',
getName: function(){
return this.myName;
}
};
console.log( obj.getName() );// 输出: 'sven' , 此时的 this 指向 obj 对象
var getName2 = obj.getName;
console.log( getName2() );// 输出:undefined,t his 是指向全局 window
4.call 和 apply
其实大家都知道call 和 apply 的作用是一样的,只是传入的参数不同.
示例如下:
var func = function( a, b, c ){
alert ( [ a, b, c ] ); //输出 [ 1, 2, 3 ]
};
func.apply( null, [ 1, 2, 3 ] );
apply 接受两个参数,第一个参数指定了函数体内 this 对象的指向,第二个参数为一个带下
标的集合,这个集合可以为数组,也可以为类数组,apply 方法把这个集合中的元素作为参数传
递给被调用的函数:
var func = function( a, b, c ){
alert ( [ a, b, c ] ); //输出 [ 1, 2, 3 ]
};
func.call( null, 1, 2, 3 );
call 传入的参数数量不固定,跟 apply 相同的是,第一个参数也是代表函数体内的 this 指向,
从第二个参数开始往后,每个参数被依次传入函数:
5.闭包
闭包也就是回掉函数:请点击查看这篇文章;
下一篇文章:单例模式