JavaScript设计模式与开发实战

        今天是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.闭包

闭包也就是回掉函数:请点击查看这篇文章;


下一篇文章:单例模式

你可能感兴趣的:(JavaScript设计模式与开发实战)