javascript - 向函数添加自定义属性

标签 javascript function oop object custom-properties

由于存在与我的关键字相关的许多其他问题,因此很难找到合适的答案,所以我会在这里提问。

正如我们所知,javascript 中的函数是对象,它们有自己的属性和方法(更准确地说,函数实例,继承自 Function.prototype)。

我正在考虑为一个函数(方法)添加自定义属性,让我们跳过“为什么?”部分并直接进入代码:

var something = {
    myMethod: function () {
        if (something.myMethod.someProperty === undefined) {
            something.myMethod.someProperty = "test";
        }
        console.log(something.myMethod);
    }
}

使用 Firebug 的 DOM 资源管理器检查时,该属性按预期定义。但是,由于我不认为自己是 javascript 专家,因此我有以下问题:
  • 这种方法可以被认为是“正确的”并且符合标准吗?它在 Firefox 中工作,但有很多东西在网络浏览器中按预期工作,并且绝不是标准。
  • 这种通过向对象添加新属性来改变对象的做法是一种好习惯吗?
  • 最佳答案

    对你的问题给出一个非常有意义的答案有点困难,因为你有点说“这是我的解决方案,可以吗?”没有解释您要解决的问题(您甚至明确表示您不会解释“为什么”)。您的代码看起来是可以运行的有效 JavaScript,但它看起来也不是最佳的做事方式。

    如果你解释了你真正想要实现的目标,你可能会得到一些关于更好的代码结构方式的好建议。不过,我会给你一些答案:

    Can this method be considered "proper" and standards compliant? It works in Firefox but there are many things working as expected in web browsers and aren't by any means standards.



    函数是对象(如您所说),因此可以向它们添加属性。这并不是一个真正的标准问题,因为它是所有浏览器都支持的 JavaScript 的核心部分。

    Is this kind of altering objects by adding new properties to them a good practice?



    这是你的对象,你可以添加任何你喜欢的属性。对象的全部意义在于它们具有您可以操作的属性。我真的无法设想一种不涉及更改对象的使用方法,包括添加、删除和更新属性和方法。

    话虽如此,对我来说,向 myMethod 添加属性实际上没有意义。功能,通常将其他属性添加到您的 something对象(如果正确调用,您的 myMethod 函数将可以通过 something 关键字访问 this 的其他属性)。

    如果您使用函数作为构造函数,通常可以向关联的原型(prototype)添加方法并向每个实例添加(非方法)属性,但您可以在适当的时候采用另一种方式或两种方式。 (请注意,“方法”本质上只是一个恰好引用函数的属性。)

    您显示的特定代码没有添加属性,它测试 someProperty属性已经存在,如果存在,则为其分配一个新值。

    您可能会从 MDN 上的一些文章中受益:
  • Working with Objects
  • Introduction to Object-Oriented JavaScript
  • 关于javascript - 向函数添加自定义属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8588563/

    相关文章:

    javascript - 如何将数字转换为字母形式,例如。 3 到 3,然后 className = 3?

    javascript - 包含 "."的数字问题,例如 1.11 或 .111

    mysql - 创建带参数的mysql函数

    python - 在 python 中创建接口(interface)和可交换实现

    javascript - 在工厂类中实现继承,而无需在 Javascript 中复制代码

    javascript - 排序数组和 indexOf() 运行时

    javascript - 如何从 Controller 到指令模板进行通信

    python - 需要帮助弄清楚为什么我的字符串比较没有通过所有测试用例

    c - 需要二维数组的解释(+传递给函数)

    java - 代码重构。实现相同接口(interface)的类