首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >角Js服务返回函数/对象?

问角Js服务返回函数/对象?
EN

Stack Overflow用户
提问于 2016-05-31 10:03:16
回答 1查看 1.6K关注 0票数 1

根据角js 文档

服务(名称,构造函数);名称:名称构造函数:将被实例化的可注入类(构造函数)。

代码语言:javascript
复制
Internally :
{
  $get: function() {
    return $injector.instantiate(constructor);
  }
}

从角度文档可以得出这样的结论:服务将传递的第二个参数作为构造函数处理,提供者通过$injector创建实例并通过$get返回。因此,每当我们将服务注入到任何模块函数(控制器、指令等)中时,它都应该返回新创建的对象,即Singleton。

现在,如果我像这样定义我的服务,问题就出现了。

代码语言:javascript
复制
1. _app_user_content.service("MyService" , function(){
        this.Message = "Greetings!";
    });  //returns object when injected.
2. _app_user_content.service("MyService" , function(){
        this.Message = "Greetings!";
        return "123"
    }); // returns object  when injected.
3. _app_user_content.service("MyService" , function(){
        this.Message = "Greetings!";
        return function(){}
    }); //returns function(){}  when injected. Doesnot return object

为什么第三种情况返回函数?

EN

回答 1

Stack Overflow用户

发布于 2016-05-31 10:14:42

这是一个JavaScript的东西,不只是一个角度的东西。

角service所做的基本上是通过执行new SomeObject()来使用您的函数作为构造函数,SomeObject是您在第二个参数中定义的函数(重要的是要注意在JavaScript函数中是对象)。

如果您的函数不返回任何值或原始值,构造函数将忽略您的返回值,而是返回您在该函数的作用域(this)上设置的任何内容。但是,如果您返回一个对象,则构造函数似乎将返回该对象。(谢谢@ajaykumar)

在浏览器控制台里试试..。

代码语言:javascript
复制
function potato() {this.yummy = true; return function() {};} 
function tomato() {this.yummy = true;}
console.log(new potato());
console.log(new tomato());

你应该看看土豆还function () {}。

你应该看到西红柿返回{yummy: true}。

对于这样的构造函数,我建议不返回任何内容。

但是,如果要使用工厂方法,您将发现,不执行new SomeObject() return将执行return SomeObject(),在这种情况下,您希望返回一个具有您想要在服务中公开的任何函数/参数的对象。

关于JavaScript new关键字、原型和构造函数这里的更多信息。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37542634

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档