JavaScript JS 怎么实现一个class(类)
问题
JS 怎么实现一个class(类)
答案
在js中利用 new
、this
和 prototype
三个关键字可以实现完备的面向对象特征。
而创建一个新的对象new关键字是不可缺少的。
只用new创建一个最简单的对象
var t = new Object();
t.a = 'anbang';
t.b = function () {
console.log(t.a);
}
t.b();
输出anbang
再利用new和this关键字改进
var t = new Object();
t.a = 'anbang';
t.b = function () {
console.log(this.a);
}
t.b();
输出anbang
,但是容然不能重复创建多个实例
再改进
function test () {
this.a = 'anbang';
this.b = function () {
alert(this.a);
}
return 1;
}
var t = test();
alert(a);
b();
alert(t);
alert(t.a);
t.b();
依次弹出
- 弹出
anbang
、 - 弹出
anbang
、 - 弹出
1
、 - 弹出
undefined
- 因为上的b不是方法。控制台还会输出
Uncaught TypeError: t.b is not a function
可见,直接调用函数时,t只是函数的返回值,并不是需要的对象。
由于test是由window对象调用的,this指代了window对象,把a和b赋给了window对象。
加上new
依次弹出,
- 弹出[object Object]
- 弹出test、
- 弹出test、
- 编译错误’a’未定义、停止执行。
Uncaught ReferenceError: a is not defined
可见,用new
运算符时,调用test
函数的对象被赋给了t
,this指代t对象,函数返回值被忽略。
a
和b()
在window上未定义。
更多面试题
如果你想了解更多的前端面试题,可以查看本站的WEB前端面试题 ,这里基本包涵了市场上的所有前端方面的面试题,也有一些大公司的面试图,可以让你面试更加顺利。
面试题 | ||
---|---|---|
HTML | CSS | JavaScript |
jQuery | Vue.js | React |
算法 | HTTP | Babel |
BootStrap | Electron | Gulp |
Node.js | 前端经验相关 | 前端综合 |
Webpack | 微信小程序 | - |
这些题库还在更新中,如果你有不错的面试题库欢迎分享给我,我整理后放上来;人人为我,我为人人,互帮互助,共同提高,祝大家都拿到心仪的Offer!