繁体   English   中英

实现一个函数来访问对象的属性,而不是使用点符号或方括号符号来访问属性?

[英]Implementing a function to access an object's property versus accessing the property using dot notation, or bracket notation?

回顾一些第三方代码,我发现编写了一个函数来获取对象的属性。

function getObjectProperty (obj, propertyName) {
        var o;
        if (obj) {
            o = obj[propertyName];
            if (o != null) {
                if (typeof o == 'function') return o();
            }
        }
        return o;
    }

如何调用此函数的一个示例是:

var foo = getObjectProperty(r, 'objProp')

使用此自定义函数来获取属性有一些好处,而不仅仅是这样做:

var foo = r.objProp

要么

var foo = r['objProp']

我只是不了解使用此功能的好处,如果有的话? 我找不到此功能的另一个示例,因此只能假定它是针对此应用程序定制的。 我唯一能看到的是,如果object属性是一个函数,它将返回一个函数调用,但是即使如此,您也可以编写:

var foo = r.objProp()

这看起来像一个(非常命名的)实用程序函数,正如您意识到的那样,它尝试从对象中获取属性的值,但是如果这是一个函数,则返回调用它的结果。

从代码中不明显吗?

如果属性是一个函数,则此行调用:

   if (typeof o == 'function') return o();

尽管它没有获得属性,并且函数没有执行应有的功能。 getObjectPropertyButIfFunctionInvokeInstead()更合适的名称。

这是写得不好的代码

简单的区别。 如果给定像这样的对象:

var foo = { a: "a", b: function() { return "b" } }

然后foo.bfoo[b]getObjectProperty(foo,"b")提供不同的结果

它似乎是获取属性的实用程序函数,如果它是“ getter”函数,则会自动调用它。 吸气剂是相当新的,许多较旧的浏览器不支持它们(IE直到9才得到它们)。

当然,如果分配给b的函数返回的是函数而不是值,那么它不会解开包装,但这大概不是目的。

那么,为什么这会有用呢? 因为吸气剂很有用。 假设您有一个这样的对象:

function order(quantity, price) {
    this.quantity = quantity;
    this.unitPrice = price;
    this.totalPrice = function() { return this.quantity * this.unitPrice }
};

var myOrder = new order(10,2);

如果我想查看myOrder的属性,那么作为该对象的使用者,我需要知道 totalPrice是一个函数。 如果我改用getObjectProperty ,则无需关心。 它将做正确的事,而我不必担心它如何计算totalPrice

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM