gpt4 book ai didi

JAVASCRIPT CLASS实例默认方法

转载 作者:行者123 更新时间:2023-11-30 07:20:22 26 4
gpt4 key购买 nike

我最近去面试,遇到一个关于 JAVASCRIPT 的问题,我无法回答,但我真的很想知道答案,但我不知道如何在 google 中表达它。

问题是:

var a = new A();
a(); // return 1
a(); // return 2

var b = new A();
b(); //return 1;
b(); //return 2;

实现A

如何使用 javascript 解决此问题。到目前为止我得到了这个

class A {
constructor(){
this.num = 1;
}
function(){
console.log(this.num--);
}
}

最佳答案

使用 new operator 时, 类构造函数或函数可以返回 this 以外的值。根据 MDN:

The object returned by the constructor function becomes the result of the whole new expression. If the constructor function doesn't explicitly return an object, the object created in step 1 is used instead. (Normally constructors don't return a value, but they can choose to do so if they want to override the normal object creation process.)

所以这个问题的可能答案是从构造函数返回一个函数:

class A {
constructor(){
this.num = 1;

return this.func.bind(this); // bind the function to `this`
}

func() {
console.log(this.num++);
}
}

var a = new A();
a(); // return 1
a(); // return 2

var b = new A();
b(); //return 1;
b(); //return 2;

可能的用途:

回答完这个问题后,我开始思考返回值的合法用途。

  1. 单例

class Singleton {
constructor() {
if(Singleton.instance) {
return Singleton.instance;
}

Singleton.instance = this;

return this;
}
}

console.log(new Singleton() === new Singleton()); // true

  1. 封装模块使用Revealing Module Pattern上课

class Module {
constructor(value) {
this.value = value;

return {
increment: this.increment.bind(this),
decrement: this.decrement.bind(this),
getValue: this.getValue.bind(this),
};
}

increment() {
this.value++;
}

decrement() {
this.value--;
}

getValue() {
return this.value;
}
}

const module = new Module(5);

module.increment();
module.increment();
module.decrement();

console.log(module.value); // undefined
console.log(module.getValue()); // 6

关于JAVASCRIPT CLASS实例默认方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49431861/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com