constructor() {
return new Date();
//return Object.create(null);
}
}
let p = new Point(); //返回为Date对象
console.log§;
Constructor与普通构造函数的区别: 类的构造函数,不使用new是没法调用的,会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
toString() {
return ‘(’ + this.x + ', ’ + this.y + ‘)’;
}
}
let p = Point(); //TypeError: Class constructor Point cannot be invoked without ‘new’
注意:在javascript中,在定义类完毕之后,还可以再添加属性和方法。
- 属性和方法添加到this上(实例对象上)
class Point {
constructor() { }
}
let p = new Point();
p.username = “huanhzhizhen”;
console.log(p.username)
let p2 = new Point();
console.log(p2.username); //undefined
注意:上代码中,只是给Point类的实例对象p添加了username属性,并不是给类添加一个属性,所以对于实例对象p2是没有username这个属性的!
3. 给类添加属性或是方法
给类添加属性或是方法有两者凡是,一时通过原型的方法,二是直接通过类.属性的方式。
-
通过原型的方式添加的属性和方法,类的全部实例公用
-
后者添加的属于类的静态属性,只能通过类访问到
3.1 方式1 通过原型prototype
class Point {
constructor() { }
}
Point.prototype.username = “zhuangzhizhen”;
let p1 = new Point();
console.log(‘p1.username-----’, p1.username)
let p2 = new Point();
console.log(‘p2.username-----’, p2.username)
上面代码中,使用 Point.prototype方式,给类添加属性。 这样,类的所有对象(p1、p2)就都有username属性了。
在javascript中,每个类都会有一个prototypr,它就是类的原型,类的所有实例共享一个原型,若类的实例想访问该类的原型,可以使用proto指针(这里跟ES5中定义的后遭函数的实例概念相似0
3.2 通过类.属性名的方式
上面代码中,直接使用 Point.username 方式给类添加一个属性,此种方式只是添加了一个静态属性,访问时,只能通过类名才能访问。
4. 类的继承
class是新es6中的语法,其实就是构造函数的另一种新写法(可叫做语法糖)
1.在定义一个类时,需要在内部加上constructor()
如下:
2.类,故名思意,类似于java语言,可以通过extends关键字来继承
当某一类要继承另一个类时要注意,一定要在constructor中的this使用之间加上super表示继承了这个类的构造方法中的变量、属性、方法,如下:
JavaScript
-
js的基本类型有哪些?引用类型有哪些?null和undefined的区别。
-
如何判断一个变量是Array类型?如何判断一个变量是Number类型?(都不止一种)
-
Object是引用类型嘛?引用类型和基本类型有什么区别?哪个是存在堆哪一个是存在栈上面的?
-
JS常见的dom操作api
-
解释一下事件冒泡和事件捕获
-
事件委托(手写例子),事件冒泡和捕获,如何阻止冒泡?如何组织默认事件?
-
对闭包的理解?什么时候构成闭包?闭包的实现方法?闭包的优缺点?
-
this有哪些使用场景?跟C,Java中的this有什么区别?如何改变this的值?
-
call,apply,bind
-
显示原型和隐式原型,手绘原型链,原型链是什么?为什么要有原型链
-
创建对象的多种方式
-
实现继承的多种方式和优缺点
-
new 一个对象具体做了什么
-
手写Ajax,XMLHttpRequest
-
变量提升
-
举例说明一个匿名函数的典型用例
-
指出JS的宿主对象和原生对象的区别,为什么扩展JS内置对象不是好的做法?有哪些内置对象和内置函数?
-
attribute和property的区别
-
document load和document DOMContentLoaded两个事件的区别
-
JS代码调试
-
开源分享:【大厂前端面试题解析+核心总结学习笔记+真实项目实战+最新讲解视频】