直接使用对象的属性和使用函数返回之间的区别

时间:2016-08-03 12:44:47

标签: javascript

在Mozilla MDN

我有以下示例

navigation__item

所以如果我这样做

var Animal = { type: "Invertebrates", // Default value of properties displayType : function() { // Method which will display type of Animal return this.type; } }

console.log(Animal.displayType()); \\Invertebrates

两个输出都是相同的,所以使用方法返回函数属性

的重点是什么

或者直接或使用函数返回对象内部属性的正确方法是什么?

谢谢&此致

3 个答案:

答案 0 :(得分:3)

关键是这个函数可以计算它返回的内容,而不是从属性中读取它。

一般来说,像这样的函数,getter和setter,据说可以增强封装,使你的设计更具弹性,防止变化。除此之外,setter可能会触发事件,这是对属性的简单分配无法做到的事情。

顺便说一下,JS中的'property'这个名字是非常不幸的,因为事实上,在所有其他语言中,属性只能通过getter和setter访问。

当java bean被发明时,仅通过函数访问属性,以便于使用称为bean box的工具。别介意那是什么。

在任何地方应用getter和setter是邪恶的,完全没必要。它可能会轻易减慢你的程序因素。

由于我所描述的原因,它们非常强大,当你需要它们时。不仅要考虑您当前的设计,还要考虑未来的修改。但是,除了使代码变慢之外,在任何地方添加getter和setter也会使源代码的数量爆炸,这本身就是未来修改的障碍。

所以如果你认为合适,你可以使用它们,但最重要的是更喜欢常识......

答案 1 :(得分:0)

区别在于你传递它们的时候。如果我将Animal.type传递给一个函数,我会立即获得该类型,但是如果我传递了该函数,那么我可以稍后运行它并在将来获得该类型。

想象一下,我的代码中有一个AJAX调用,在成功方法中,我想根据类型做一些事情。如果我将类型传递给我的函数,它可能会在调用成功函数之前发生变化。在这种情况下,拥有一个函数会更好,因为我们可以在成功发生时计算类型。

请考虑以下代码: -

function test(typeProp, typeFunc) {
    $.ajax({
        url: '/GetTest',
        success: function() {
            if(typeProp === 'Cat') {
                //do something
            }
            if(typeFunc() === 'Cat') {
                //do something
            }
        }
    })
}

var Animal = {
  type: "Cat", // Default value of properties
  displayType : function() {  // Method which will display type of Animal
    return this.type;
  }

test(animal.type, animal.displayType);
animal.type = 'Dog';

一旦代码到达成功函数,typeProp将是' Cat',但typeFunc将返回' Dog';

答案 2 :(得分:0)

有时您想使用其属性返回其他信息:

示例:您有“Invertebrates”的映射,它返回单词(dictionnary)的描述。因此,通过调用displayDefinition(),它将为您提供定义

  displayDefinition: function() {  
    return dictionnaryFind(this.type);
  }