1.constructor方法的特点?
constructor方法是类的默认方法,通过new命令生成对象实例时,自动调用该方法。一个类必须有constructor方法,如果没有显式定义,一个空的constructor方法会被默认添加。constructor方法默认返回实例对象(即this),完全可以指定返回另外一个对象,类的构造函数,不使用new是没法调用的,会报错。这是它跟普通构造函数的一个主要区别,后者不用new也可以执行。

2.this代表什么意思?
在非箭头函数下, this 指向调用其所在函数的对象,而且是离谁近就是指向谁(此对于常规对象,原型链, getter & setter等都适用);构造函数下,this与被创建的新对象绑定;DOM事件,this指向触发事件的元素;内联事件分两种情况,bind绑定, call & apply 方法等。

3.__proto__和 prototype分别表示什么意思?两者有什么区别?
每个对象(包括函数、函数的prototype对象)都有一个__proto__属性,她指向创建该对象的函数的prototype属性。
prototype 是原型,是Function对象才有的属性;实例对象没有prototype属性,但是有私有属性__proto__属性。

1.下面程序对吗?为什么?
class Person{ /* … */ }
class Student extends Person {
constructor() {
}
}
let cp = new Student ();
不对,正确为:
2020年ES6练习题-3
Student类必须在constructor方法中调用super方法,否则会报错。
这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。

课后作业1:
1.编写程序使用ES6定义 Person类,包括类实例属性(name,age),实例方法say()该方法
返回name和age字符串
2020年ES6练习题-3

2.下面程序执行结果为:
var p=new Person();
console.log(p.proto===Person.prototype)

因为Person在 程序中未被定义,p是person的原型,所以console.log(p.proto===Person.prototype)输出结果为true。

课后作业2:
下面程序正确吗?错在哪里?如何改正?
class Point {
constructor(x, y) {
this.x = x;
this.y = y;
}
}
class ColorPoint extends Point {
constructor(x, y, color) {
this.color = color; // ReferenceError
super(x, y);
}
}
var cp=new ColorPoint(10,20,‘red’);
2020年ES6练习题-3
需要先用super继承再this

课后作业3:下面程序执行结果为?
class Parent {
static myMethod(msg) {
console.log(‘static’, msg);
}
myMethod(msg) {
console.log(‘instance’, msg);
}
}
class Child extends Parent {
static myMethod(msg) {
super.myMethod(msg);
}
myMethod(msg) {
super.myMethod(msg);
}
}
Child.myMethod(1);
var child = new Child();

输出static1,静态方法直接通过类调用,不能通过实例对象调用。

课后作业提高题1:
1.请利用class重新定义Cat,并让它从已有的Animal继承,然后新增一个方法say(),
返回字符串’Hello, xxx!’
class Animal {
constructor(name) {
this.name = name;
}
}

2020年ES6练习题-3

课后作业拓展题1:
2.接上面程序分析下面代码执行结果为:
var kitty = new Cat(‘Kitty’);
var doraemon = new Cat(‘哆啦A梦’);
if ((new Cat(‘x’) instanceof Animal) && kitty && kitty.name === ‘Kitty’ && kitty.say &&
typeof kitty.say === ‘function’ && kitty.say() === ‘Hello,Kitty!’ &&
kitty.say === doraemon.say) {
console.log(‘测试通过!’);
} else {
console.log(‘测试失败!’);
}
输出结果为:测试失败
Instanceof主要用来测试一个对象是否为一个类的实例,分析程序,可以知道判断条件是false,输出测试失败。
课后作业拓展2:
下面程序执行结果为:
(typeof (new (class { class () {} })));
A、 “function”
B、 “object”
C、 “undefined”
D、 Error
选B

相关文章:

  • 2021-05-29
  • 2021-05-16
  • 2022-01-12
  • 2022-12-23
  • 2022-12-23
  • 2021-11-21
猜你喜欢
  • 2021-12-09
  • 2021-08-27
  • 2022-12-23
  • 2022-01-23
  • 2022-12-23
  • 2021-11-07
相关资源
相似解决方案