我不太确定以下JS代码的作用:
myApp.factory('helloWorldFromFactory', function() {
return {
sayHello: function() {
return "Hello, World!"
}
};
});
对于那些使用Angularjs的人而言,代码看起来很熟悉,但这两个回报令我感到困惑。我认为这是Javascript中的一种典型技术,但我之前从未见过。
有人可以为我揭开这一点吗?
答案 0 :(得分:2)
第一个return
语句返回带有属性的对象文字。该属性是一个名为sayHello
的函数。
简化版可能如下所示:
function getStuff() {
return {
someFunction: function() {
return 'Hello World';
}
}
}
var o = getStuff();
console.log(o.someFunction());
答案 1 :(得分:1)
让我们将其分解为不同的概念。首先是外部呼叫:
myApp.factory('helloWorldFromFactory', function() {
// irrelevant for now
});
您正在factory
上调用函数myApp
,并传递两个参数:字符串'helloWorldFromFactory'
和函数。在JavaScript中,函数是第一类对象:这意味着你可以传递它们并将它们存储在变量中,就像使用数字,字符串等一样。例如:
// Store a function into a variable myFunction
var myFunction = function(x) { return x*2; };
// Invoke the function through the variable
myFunction(5);
// Pass the function to another function
someFunction(myFunction);
好的,第一个函数体(factory()
的第二个参数):
function() {
return {
sayHello: // let's ignore it for now
};
}
这是一个返回包含属性sayHello
的JavaScript对象的函数。这个属性可以是任何东西,但在这种情况下,它是另一个函数:
function() {
return "Hello, world!";
}
首先,您将函数传递给factory()
。当有人调用该函数时:
// hypothetical code somewhere in the framework:
var theObject = yourStoredFunction();
这将返回上述对象。现在,如果其他一些代码使用这样的对象:
var greeting = theObject['sayHello']();
这将调用最里面的函数,并返回字符串"Hello, world!"
。
答案 2 :(得分:0)
当你运行zhe factory时,它会给你一个对象:
{sayHello: function() {
return "Hello, World!"
}}
第一个返回意味着什么。然后第二个意思是你使用object.sayHello,它会返回一个字符串“Hello,World!”。
答案 3 :(得分:0)
角度术语中的用法示例:
myApp.controller('MyCtrl', function ($scope, helloWorldFromFactory) {
$scope.helloString = helloWorldFromFactory.sayHello();
});