JavaScript中利用构造器函数模拟类的方法
前言
本文小编带大家一起学习的是在JavaScript中使用构造器函数(construcorfunction)模拟类。下面话不多说,感兴趣的朋友们下面来一起看看吧。
构造器函数简介
你可以使用ES6的class关键字来实现类,不过我建议你使用传统的构造器函数来模拟类,因为这样可以给人一种你是个JavaScript老手的错觉,哈哈!
什么是构造器函数?构造器函数是编写对象的方法之一。一般情况下,你可以这样编写一个对象:
varobj={a:1,b:2};
但也可以使用构造器函数来编写对象:
functionObj(a,b){ this.a=a; this.b=b; } varobj=newObj(1,2);//obj等价于{a:1,b:2}
使用构造器函数的好处在于可以传递参数。构造器函数通常首字母大写,而且需要使用new关键词来调用。在JavaScript中是没有类的,利用构造器函数我们可以模拟一个类。
使用构造器函数编写栈类
了解了构造器函数,我们使用它编写一个迷你的栈类,下面就是实现代码:
Stack.js
functionStack(){ //私有变量items,用于记录数组,对象不能直接操作 varitems=[]; //类方法push,在数组末尾添加项,对象可以直接调用 this.push=function(element){ items.push(element); }; //删除并返回数组末尾的项 this.pop=function(){ returnitems.pop(); }; }
上述栈类中,有个私有变量items,为何它就不能直接操作呢?为何挂在this上的方法可以直接调用?因为new操作符会将构造器函数中的this指向生成的对象,也就是说挂在this上的方法或属性将来会成为生成对象的方法或属性,所以可以直接调用。而items则是函数内部的一个局部变量,它在函数外部是不可见的,生成对象只能通过调用自身的方法,沿着作用域链来操作items。
varstack=newStack(); //stack对象不能直接操作items,结果是undefined console.log(stack.items) //stack对象可以直接操作构造器函数中挂在this上的属性和方法 stack.push(1); //打印了1 console.log(stack.pop())
如果你不熟悉JavaScript,那么你应该先学习一下JavaScript作用域、this和new操作符的相关知识。推荐阅读参考StoyanStefanow的《JavaScript面向对象编程指南》,这本书里面有很多小的代码片段以及相关的图文解读,可以帮助你更好地理解JavaScript的相关特性。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家学习或者使用Javascript能带来一定的帮助,如果有疑问大家可以留言交流。