【每日一题】11

1.输出什么?

function Person(firstName, lastName) {
  this.firstName = firstName;
  this.lastName = lastName;
}

const member = new Person('Lydia', 'Hallie');
Person.getFullName = function() {
  return `${this.firstName} ${this.lastName}`;
};

console.log(member.getFullName());
  • A: TypeError
  • B: SyntaxError
  • C: Lydia Hallie
  • D: undefined undefined

知识点

  • js构造函数和类[https://es6.ruanyifeng.com/#docs/class#%E7%AE%80%E4%BB%8B]

转载地址:
https://github.com/lydiahallie/javascript-questions#11-whats-the-output

解析 答案:A

解析:在js中,方法是对象,因此,getFullName 方法只是加到Person 这个构造函数本身这个对象而已。由于这样的原因,我们可以调用Person.getFullName(),而 member.getFullName 抛出错误TypeError。

假如你想要所有的对象实例都有getFullName方法,那应该加到Person原型链上。

Person.prototype.getFullName = function() {
  return `${this.firstName} ${this.lastName}`;
};

关于构造函数和类:

js中,生成实例对象的传统方式是通过构造函数

function Point(x, y) {
  this.x = x;
  this.y = y;
}

Point.prototype.toString = function () {
  return '(' + this.x + ', ' + this.y + ')';
};

var p = new Point(1, 2);

es6 引入class,可将class当作语法糖。

class Point {
  constructor(x, y) {
    this.x = x;
    this.y = y;
  }

  toString() {
    return '(' + this.x + ', ' + this.y + ')';
  }
}

这两种写法都是表达的一个意思。定义Point对象
摘录自:https://es6.ruanyifeng.com/#docs/class#%E7%AE%80%E4%BB%8B

上一篇:vue v-on语法糖


下一篇:Mybatis-自定义映射resultMap01