gpt4 book ai didi

javascript - ( Angular 6)子函数是否应该返回它正在操作的对象?

转载 作者:行者123 更新时间:2023-11-30 14:22:55 24 4
gpt4 key购买 nike

我不是受过培训的开发人员,所以我的问题很可能揭示了一些基本的误解。我曾尝试搜索此主题,但我什至不确定要查找哪些短语。 (这与范围有关吗?权限?)

我正在开发 Angular 6 应用程序。在其中,我有一个服务,该服务具有从另一个服务调用函数的功能。

嵌套函数操作作为参数传递给它的对象的各种字段。

像这样:

parentFunction(person:Person, scenario:CalculationScenario){
person.age = 1
scenario.value = 0
this.otherService.childFunction(person, scenario)
console.log(person.age) //logs "2"
console.log(scenario.value) //logs "100"
}

在其他服务中:

childFunction(person:Person, scenario:CalculationScenario){
person.age = person.age + 1
scenario.value = scenario.value + 100
//Does not return anything
}

我以前认为,为了让 person.agescenario.value 的值(在 parentFunction 内)反射(reflect)变化在 childFunction 中创建,childFunction 必须返回这些对象(并且 parentFunction 必须将其“child”和“scenario”对象设置为等于 childFunction 返回的值。

但是如果我在调用 childFunction 之后立即 console.log 它们,它们的值实际上已经改变了。

出于某种原因让 childFunction 返回“person”和“scenario”仍然更可取吗?

再次,如果其他地方存在类似的讨论,我们深表歉意。我很难找到它们,因为我什至不确定哪些术语指的是我所询问的主题。

最佳答案

根据此 childFunction() 的用例,它可能更可取。

服务方法返回值以提高其可重用性是个好主意。

查看此服务的getHeroes()方法:

import { Injectable } from '@angular/core';
import { Observable, of } from 'rxjs';
import { Hero } from './hero';
import { HEROES } from './mock-heroes';
import { MessageService } from './message.service';

@Injectable({
providedIn: 'root',
})
export class HeroService {

constructor(private messageService: MessageService) { }

getHeroes(): Observable<Hero[]> {
this.messageService.add('HeroService: fetched heroes');
return of(HEROES);
}
}

它不会更改服务中声明的变量的值,而是返回一些英雄。

它很有用,因为在某些组件中,我可以执行类似 getHeroes() 方法的操作:

import { Component, OnInit } from '@angular/core';
import { Hero } from '../hero';
import { HeroService } from '../hero.service';

@Component({
selector: 'app-heroes',
templateUrl: './heroes.component.html',
styleUrls: ['./heroes.component.css']
})
export class HeroesComponent implements OnInit {

heroes: Hero[];

constructor(private heroService: HeroService) { }

ngOnInit() {
this.getHeroes();
}

getHeroes(): void {
this.heroService.getHeroes()
.subscribe(heroes => this.heroes = heroes);
}
}

只需更改 getHeroes() 组件方法,我就可以轻松自定义要在某些 View 上使用的输出,而无需更改服务并确保任何组件都可以使用相同的 getHeroes() 服务方法


让您的服务方法返回一些东西的另一个很好的理由是更容易测试它们。

如 Balázs Takács 所示,期望值可以非常简单地编写:

it('should return correct sum', () => {
expect(service.myMethod(1, 2))
.toEqual(3);
});

关于javascript - ( Angular 6)子函数是否应该返回它正在操作的对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52445291/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com