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

Javascript 直接使用对象属性和使用函数返回之间的区别,javascript,Javascript,在Mozilla MDN中 我有下面的例子 var Animal = { type: "Invertebrates", // Default value of properties displayType : function() { // Method which will display type of Animal return this.type; } } 所以如果我这样做了 console.log(Animal.displayType())\\无脊椎动物 及

在Mozilla MDN中

我有下面的例子

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


}
所以如果我这样做了

console.log(Animal.displayType())\\无脊椎动物

console.log(动物类型)\\无脊椎动物

两个输出都是相同的,那么使用方法返回函数的属性有什么意义呢

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


感谢与问候

关键是此函数可能会计算返回的内容,而不是从属性读取

一般来说,像getter和setter这样的函数可以增强封装性,并使您的设计更能适应变化。除此之外,setter还可能触发事件,这是简单的属性赋值无法做到的

顺便说一句,JS中的名称“property”非常不幸,因为事实上,在所有其他语言中,属性只能通过getter和setter访问

当JavaBean被发明时,只通过函数访问属性成为一种时尚,以便于使用称为BeanBox的工具。不管那是什么

到处应用getter和setter是邪恶的,完全没有必要。它可能会因各种因素而很容易使您的程序变慢

它们非常强大,当你需要它们时,出于我描述的原因。不要只考虑当前的设计,还要考虑将来的修改。但是到处添加getter和setter,除了使代码变慢之外,还会使源代码数量激增,这本身就是未来修改的障碍


因此,如果您认为合适,可以使用它们,但更喜欢常识…

关键是此函数可能会计算它返回的内容,而不是从属性读取它

一般来说,像getter和setter这样的函数可以增强封装性,并使您的设计更能适应变化。除此之外,setter还可能触发事件,这是简单的属性赋值无法做到的

顺便说一句,JS中的名称“property”非常不幸,因为事实上,在所有其他语言中,属性只能通过getter和setter访问

当JavaBean被发明时,只通过函数访问属性成为一种时尚,以便于使用称为BeanBox的工具。不管那是什么

到处应用getter和setter是邪恶的,完全没有必要。它可能会因各种因素而很容易使您的程序变慢

它们非常强大,当你需要它们时,出于我描述的原因。不要只考虑当前的设计,还要考虑将来的修改。但是到处添加getter和setter,除了使代码变慢之外,还会使源代码数量激增,这本身就是未来修改的障碍


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

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

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

考虑以下代码:-

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';

一旦代码到达success函数,typeProp将是“Cat”,但typeFunc将返回“Dog”

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

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

考虑以下代码:-

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';

一旦代码到达success函数,typeProp将是“Cat”,但typeFunc将返回“Dog”

有时您希望使用其属性返回一些其他信息:

示例:您有一个“无脊椎动物”的映射,它返回单词的描述(字典)。因此,通过调用displayDefinition()它将为您提供定义

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

有时,您希望使用其属性返回一些其他信息:

示例:您有一个“无脊椎动物”的映射,它返回单词的描述(字典)。因此,通过调用displayDefinition()它将为您提供定义

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

在这种情况下,不是很多。在其他情况下也可能有用处,即在属性返回之前对其进行某种数据操作。@tymeJV谢谢,我知道这是一个愚蠢的问题,但由于我正在尝试深入学习JS,因此我觉得在这种情况下提出疑问很好,不多。在其他情况下也可能有用处,即在属性返回之前对其进行某种数据操作。@tymeJV谢谢,我知道这是一个愚蠢的问题,但由于我正在尝试深入学习JS,因此我觉得在这里提问很好,即使在读了一点面向对象的JS之后,我仍然觉得基于函数的实现速度更快,尽管对于大型表单验证或SPA,我认为面向对象的方法更适用,即使在阅读了一点面向对象的Js之后,我仍然觉得基于函数的实现更快,尽管对于大型表单验证或SPA,我认为面向对象的方法更适用