gpt4 book ai didi

没有 this、that、self 等的 JavaScript 类

转载 作者:行者123 更新时间:2023-12-03 04:33:33 26 4
gpt4 key购买 nike

是否可以在不使用“this”关键字的情况下创建 JavaScript 类?表达式如

var self = this;
...
self.property = value;

也被禁止。我不想考虑上下文并只使用变量。

看一下这个简单的类:

function Timer() {
var interval = 0;
var count = ++Timer.totalCount;

function setInterval(val) {
interval = val;
}
function run() {
setTimeout(done, interval);
}
function done() {
var div = document.createElement('div');
div.innerHTML = 'Timer #' + count + ' finished in ' + interval + ' ms';
document.body.appendChild(div);
}

return {
setInterval: setInterval,
run: run
}
}
Timer.totalCount = 0;

var t1 = new Timer();
var t2 = new Timer();
var t3 = new Timer();

//how to directly set interval value without set function?
t1.setInterval(3000);
t2.setInterval(2000);
t3.setInterval(1000);

t1.run();
t2.run();
t3.run();

此类根本不使用“this”。

正确吗?

我可以创建这样的真实类(class)吗?是否存在潜在问题?

如何在没有 get/set 函数的情况下在此类中创建属性?

该类可以使用继承来扩展吗?

最佳答案

首先,this是JavaScript中的一个基本东西。强烈建议您能够理解它并推理其上下文。

如果您想要更“传统”的 OOP 代码并且能够使用 ES6/ES2015(或使用 Babel 进行转译),那么所有关于 this 的推理也变得更容易,所有代码也更干净。这是用 ES2015 重写的示例,包括继承部分:

class Timer {
constructor(count, interval) {
this.interval = interval
this.count = count
}

run() {
setTimeout(() => {
const div = document.createElement('div')
div.innerHTML = `Timer #${this.count}
finished in ${this.interval} ms`
document.body.appendChild(div)
}, this.interval)
}
}

class OneSecondTimer extends Timer {
constructor(count) {
super(count, 1000)
}
}

const t1 = new Timer(1, 3000)
const t2 = new Timer(2, 2000)
const t3 = new OneSecondTimer(3)

t1.run()
t2.run()
t3.run()

关于没有 this、that、self 等的 JavaScript 类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43390608/

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