【问题标题】:Hoisted method in javascriptjavascript中的提升方法
【发布时间】:2020-09-10 05:35:36
【问题描述】:

我想学习在对象中提升方法的正确方法。 我的目标是将对象定义放在代码末尾,将对象用法放在开头。比方说:

doing stuff with o

let o = {
    bar: 1,
    foo: function() {
        console.log(this.bar);
    },
}

当然,如果我在写:

o.foo();

let o = {
    bar: 1,
    foo: function() {
        console.log(this.bar);
    },
}

o 未定义,因为对象是在使用后声明的。

我想到了这个技巧:

o = returnO();
o.foo();

function returnO() {
    return o = {
        bar: 1,
        foo: function() {
            console.log(this.bar);
        },
    }
}

这可行,但我想知道是否没有更好的方法来避免该声明

o = returnO();

谢谢。

【问题讨论】:

  • 为什么要实现这个目标?你也在谈论提升功能,但o 实际上不是一个功能
  • 为什么要在定义之前使用它?是什么让您认为这是个好主意?
  • @Ashish singh:目的不是o对象,而是o内部的foo方法的使用。当你在对象内部声明方法时,据我所知,你不能用函数声明来声明它,它必须是一个函数表达式。 @ Utkanos:对我来说,在代码开头使用对象似乎更容易(例如,如果您有一个管理 ajax 请求的对象和一些将其分配给页面的某些元素的语句)。但这只是vue点的问题,我的第一个目的是想办法用函数声明来定义对象方法

标签: javascript object methods hoisting


【解决方案1】:

我不知道你想要完成的目的是什么,也许你在练习。

问题是变量的post声明,此时引擎解释你的代码o.foo();,变量o已声明但尚未初始化。

您可以使用如下的函数声明(提升函数),并将其用作与您想要完成的类似的构造函数:

new A().foo();

function A() {
  this.bar = 1;
  this.foo = function() {
    console.log(this.bar);
  };
}

【讨论】:

  • 准确地说,o 已声明,但未分配给对象。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2015-03-30
  • 2020-12-08
  • 2011-08-27
  • 1970-01-01
  • 2011-01-11
  • 2015-08-24
相关资源
最近更新 更多