首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >不带这个、那个、自身等的JavaScript类

不带这个、那个、自身等的JavaScript类
EN

Stack Overflow用户
提问于 2017-04-13 19:06:34
回答 1查看 1K关注 0票数 1

可以在不使用‘JavaScript’关键字的情况下创建此类吗?表达式,如

代码语言:javascript
运行
复制
var self = this;
...
self.property = value;

也是被禁止的。我不想考虑上下文,只使用var。

看一下这个简单的类:

代码语言:javascript
运行
复制
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‘。

这是正确的吗?

我能像那样创建真正的类吗?有没有潜在的问题?

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

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

EN

回答 1

Stack Overflow用户

发布于 2017-04-13 19:47:26

首先,this是JavaScript中最基本的东西。非常推荐你能够理解它,并对它的上下文进行推理。

如果你想要一个更“传统”的OOP代码,并且能够使用ES6/ES2015 (或者用巴别塔转译),那么关于this的所有推理也会变得更容易,所有的代码也会变得更干净。下面是用ES2015重写的示例,包括继承部分:

代码语言:javascript
运行
复制
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()

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/43390608

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档