在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
两个输出都是相同的,所以使用方法返回函数属性
的重点是什么或者直接或使用函数返回对象内部属性的正确方法是什么?
谢谢&此致
答案 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);
}