gpt4 book ai didi

Javascript - 没有实现契约(接口(interface))的依赖注入(inject)

转载 作者:行者123 更新时间:2023-11-28 00:04:58 27 4
gpt4 key购买 nike

JavaScript 新手。假设我有一个像这样的构造函数:

function Dependent(dependency) {
this.doSomething = function(x) {
dependency.doSomethingReal(x);
}
}

var impl = new SomeImplementation();
var dependent = new Dependent(impl);
console.log(dependent.doSomething(3));

我的理解是,该语言中没有任何内容可以帮助确保 impl 实际上能够履行其职责(实际上有一个名为 doSomethingReal 的方法,它带有一个参数)。

有几个问题:

  1. 在构造函数中,我应该手动检查 dependency 参数以确保它具有 Dependent 所需的所有内容吗?
  2. 我应该不担心吗?
  3. 其他图书馆如何处理这种情况?例如,我知道有一些 DI 项目...或 MVC 项目,例如需要它们的 View 对象来实现某些众所周知的方法。

我意识到我可以将一个函数传递给构造函数。换句话说,如果dependency是一个函数,那么我们只需调用它即可。这是最安全的方法吗?我不认为这就是 MVC 项目所做的...而且有时传递对象是有意义的。

最佳答案

您可以使用 instanceof 来检查一个对象是否是另一个对象的实例。

例如,在您的代码中:

function Dependent(dependency) {

// here we could check that dependency is an instance of SomeImplementation
if (!(dependency instanceof SomeImplementation))
throw "dependency must be an instance of SomeImplementation";

this.doSomething = function(x) {
dependency.doSomethingReal(x);
}
}

var impl = new SomeImplementation();
var dependent = new Dependent(impl);
console.log(dependent.doSomething(3));

在 javascript 中,使用“duck typing”也很常见。 ' 验证对象的方法。例如:

console.log (
'isABird' in duck &&
'walks' in duck &&
'swims' in duck &&
'quacks' in duck ?
"juhm... I'm pretty sure we're dealing with a duck" :
"meh... since I a expect a duck to be a bird, walks, swims and quacks, then this buddy is definitely not a duck"
);

关于Javascript - 没有实现契约(接口(interface))的依赖注入(inject),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31440374/

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