javascript - JavaScript 中对象的区别

标签 javascript

我在大学学习前端开发类(class),老师坚持要我们使用一本旧书,以便在我们继续学习更高级和最新的实现之前学习 JavaScript 的历史和基础知识。

现在在这本书中,我们被指示为食品卡车编写​​一个网页,它应该接受订单。

现在在一些脚本中,对象定义如下:

function DataStore() {
    this.data = {};
  }

这里使用关键字“this”定义数据对象,表示它属于函数对象 DataStore。

然而在某些脚本中,数据对象被定义为:

FormHandler.prototype.addSubmitHandler = function() {
    console.log('Setting submit handler for form');
    this.$formElement.on('submit', function(event){
      event.preventDefault();

      var data = {};

我的问题是这两个数据对象有什么区别?

最佳答案

简答在最下方

关于事情如何运作的冗长而无聊的介绍

当你这样写的时候:

function SomeThing() { }

你总能做到

let a = new SomeThing();

即使它没有意义,比如:

function lel() { console.log('lelelel'); }
let g = new lel();
console.log(g);
console.log(g.constructor.name);

这意味着类实际上与函数相同。并且您在其中使用关键字 this 的函数通常意味着您将要创建它的实例。

现在,如果我希望我的 lel() function 类的所有实例都有一个名为 foo 的属性和一个名为 的方法bar 这是你的做法:

lel.prototype.foo = "Some initial value";
lel.prototype.bar = function() {
  console.log(this.foo);
}

现在我可以做

let g = new lel();
lel.bar();
lel.foo = "Hell yeah !";
lel.bar();

总而言之,这是:

function SomeThing() {
  this.data = {};
}

SomeThing.prototype.setData = function(key, value) {
  this.data[key] = value;
}

SomeThing.prototype.getDataKeys = function() {
  return Object.keys(this.data);
}

SomeThing.prototype.getDataValues = function() {
  return Object.values(this.data);
}

和这个是一样的

class SomeThing {
  constructor() {
    this.data = {};
  }

  setData(key, value) {
    this.data[key] = value;
  }

  getDataKeys() {
    return Object.keys(this.data);
  }

  getDataValues() {
    return Object.values(this.data);
  }
}

关于您的问题的说明

如果您的代码中某处有:

FormHandler.prototype.addSubmitHandler = function() {
    console.log('Setting submit handler for form');
    this.$formElement.on('submit', function(event){
      event.preventDefault();

      var data = {};

if necessarily 意味着你在代码的其他地方有

function FormHandler(...) { ... }

简答

这个:

function DataStore() {
  this.data = {};
}

是如何定义一个名为 DataStore 的类,其中一个名为 data 的属性初始化为值 {}

还有这个:

FormHandler.prototype.addSubmitHandler = function() {
    ...
    var data = {};
}

是将名为 addSubmitHandler 的方法添加到已定义的类 FormHandler 的方法。该方法使用一个名为 data 的局部变量,可以是任何其他名称

关于javascript - JavaScript 中对象的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63374395/

相关文章:

javascript - 为什么不添加 ng-leave/ng-enter 类

javascript - event.preventDefault() 不起作用。

javascript - JQuery Mobile 导航栏列表项未垂直对齐

javascript - activateController 在页面加载时被调用两次

javascript - 匹配 Mongoose 中带或不带 http(s) 或 www 的任何 url

javascript - 如何在 html 输入字段中显示此 javascript 返回值?

c# - jquery 中出现非法调用错误

javascript - 在 form_for 中使用按钮作为 "checkbox"?

javascript - 如何使用 Jasmine 监视匿名函数

对象所有实例的 javascript "execute-all"方法