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