回顾一些第三方代码,我找到了一个函数来获取对象的属性。
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()
答案 0 :(得分:0)
这看起来像一个(非常命名的)实用程序函数,正如您自己实现的那样,尝试从对象获取属性的值,但如果这是一个函数,则返回调用它的结果。
答案 1 :(得分:0)
代码中是不是很明显?
如果属性是函数,则该行调用:
if (typeof o == 'function') return o();
虽然它没有得到属性,但功能并没有做到它应该做的事情。
getObjectPropertyButIfFunctionInvokeInstead()
更合适的名称。
编写糟糕的代码
答案 2 :(得分:0)
简单的区别。如果给出一个像这样的对象:
var foo = { a: "a", b: function() { return "b" } }
然后foo.b
或foo[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