【问题标题】:Setting Properties in JavaScript Object Which Operator to Use在 JavaScript 对象中设置要使用的运算符的属性
【发布时间】:2015-06-09 21:11:41
【问题描述】:

我对 = 与 : 在为对象中的属性赋值时感到困惑

现在我知道有几种创建对象的方法:

  • 对象字面量
  • 对象构造器

对于对象 Literal,您可以使用“:”来为属性赋值:

var myObject = {firstName: "John", lastName="Smith" };

我们使用“:”来设置属性的值。

我也知道函数本身就是一个对象。您可能可以从那里公开公共属性作为作为对象的函数的一部分?

如果您将函数分配给您将使用“=”的属性,是这样吗?我还在假设,但是这样的事情呢:

var phantom = require('phantom');

var World = function World(callback) {

    phantom.create("--web-security=no", "--ignore-ssl-errors=yes", { port: 12345 }, function (ph) {
        var phantomProcess = ph;

        createBrowserPage = function(){
            phantomProcess.createPage(function(page) {

                this.headlessPage = page;
            })
        };
    });

    callback();
};

module.exports.World = World;

我认为我有这个权利,因为我想通过导出来公开 createBrowserPage。我不会使用 createBrowserPage: 并使用“:”而不是“=”将该匿名函数分配给 createBrowserPage 属性对吗?

【问题讨论】:

    标签: javascript node.js


    【解决方案1】:

    = 用于 Javascript 语句中的赋值,如下所示:

    variable = "foo";
    

    : 用于属性name: value 之间的对象字面量声明中,如下所示:

    var obj = {
        prop1: value1,
        prop2: value2
    };
    

    如果您想通过导出公开您的createBrowserPage() 函数,您有多种选择,其中一些涉及创建对象,其中一些涉及将属性分配给对象。您选择哪个以及如何声明它会导致您使用: 还是=。这取决于您选择编写公开createBrowserPage() 的javascript 代码的方式。那里没有单一的答案。我会给你几个选择。

    如果在一个语句中,您想为导出对象分配一个新属性,那么您可以像这样使用=:

    module.exports.myFunc1 = myLocalFunction1;
    

    如果在一个语句中,您希望分配所有导出的函数,那么您将分配一个用= 分配的对象,但在对象的声明中使用:,如下所示:

    module.exports = {
        myFunc1: myLocalFunction1,
        myfunc2: myLocalFunction2
    };
    

    在第一个示例中,您将向导出对象添加一个新属性并为该属性分配一个值。

    在第二个示例中,您声明了一个新的 Javascript 文字对象(它使用 prop: value 语法来声明其属性。然后,您将整个对象分配给 module.exports,它实际上替换了整个现有的 exports一个新的对象,这个新对象有两个属性。

    【讨论】:

    • 你也可以做 module.exports = { myFunc1: function(){...code here}, myFunc2: function(){...code here}};并在对象文字中分配匿名函数?我想答案还没有。
    • 所以还有第三种选择。假设您做了 module.exports.myFunc1 = someOtherVariable,其中 myFunc1 是导出对象上的一个现有方法,在这里您将覆盖该方法并用您的 someOtherVariable 覆盖该方法。换句话说,您可以使用 = 更新/覆盖 -existing- 属性或方法,对吗?
    • @WeDoTDD - 是的,= 也将替换以前存在的值,是的,函数可以是内联匿名函数,而不是对命名函数的引用。在 Javascript 中,函数引用可以是命名函数或内联匿名函数。
    【解决方案2】:

    您的问题有点令人困惑,但如果您对: 和= 的确切含义和语法感兴趣,可以这样:

    冒号 (:) 符号 不是运算符,它是litteral object notation 语法的一部分,用于分隔属性名称 (文字字符串或简单标识符)来自它们的值(任何表达式)。冒号仅在该上下文中使用,并作为三元条件运算符 (?:) 的一部分。

    当且仅当{ 不是指令中的第一个字符(否则它定义了一个块)并且不遵循function 表达式或声明时,大括号中的某些内容才会被解析为一个litteral 对象。

    赋值运算符 (=) (spec) 是二元运算符,它可以用于任何表达式,只要其左操作数是有效的左侧表达式,并返回右操作数的值。除非使用严格模式,否则它将无法为只读属性赋值。

    【讨论】:

    • 谢谢,另一个人给了我更多,并且为我回答得更清楚,但无论如何感谢您的回答。
    • 在严格模式下在有和没有严格时发生的行为中也有好处。
    猜你喜欢
    • 2020-07-02
    • 1970-01-01
    • 1970-01-01
    • 2013-04-11
    • 1970-01-01
    • 2020-04-21
    相关资源
    最近更新 更多