gpt4 book ai didi

javascript - 如何从函数内引用对象属性(该属性也是服务工厂中的对象属性)

转载 作者:行者123 更新时间:2023-12-02 15:42:41 24 4
gpt4 key购买 nike

我试图在 addProduct 成功回调中调用 getAllProducts 方法,但它显示 getAllProducts 未定义

  'use strict';

ProductBuilder.factory('productBuilderService', function ($http, secKey, urlContent) {
return {

getAllProducts: function ($scope) {
$http.get(urlContent + '/api/Products')
.success(function (response) {
$scope.products = response;
});
},

addProduct: function ($scope) {
var data = {
"action": "post",
"product":
{
"ID": $scope.ID,
"Name": $scope.Name,
"Section": $scope.Section
}
}

$http({
url: urlContent + '/api/Products',
method: "POST",
data: data
}).success(function (response) {
getAllProducts($scope);
});
},

deleteProductByID: function (id, $scope) {
var data = {
"action": "delete",
"rule":
{
"ID": id,
"Name": $scope.Name,
"Section": $scope.Section
}
}

$http({
url: urlContent + '/api/Products',
method: "POST",
data: data
}).success(function (response) {
getAllProducts($scope);
});
}
};
});

最佳答案

getAllProducts 是您要返回的对象的属性,而不是您可以自行调用的局部变量。我建议您先创建对象,然后返回它。这样,您就可以引用它所属的对象。

var myObj = {
getAllProducts: function() { //etc
anotherFunction: function() {
//etc
myObj.getAllProducts();

}
};
return myObj;

另一种选择是先创建函数,然后将其存储到对象中:

function getAllProducts() { //etc } // local variable
return {
getAllProducts: getAllProducts, // assign the local variable to the object
anotherFunction: function() {
getAllProducts(); // now you can call the local variable
}
}

您还可以在对象内使用 this 指针来引用该对象的其他属性,但我建议避免使用 this 指针。 this 的值会根据您使用它的地点和时间而变化。

假设上下文(this的值)没有改变,那么this.getAllByProducts()将引用属性getAllProducts 如果从属于该对象属性的函数之一调用,则在要返回的对象上。但是,在您调用 getAllProducts 的特定位置,this 的值由 $http 调用设置,不再引用你的对象。这意味着您必须将 this 的值缓存到一个变量,同时它引用您的对象并使用该变量:

return {
getAllProducts: function() { //etc }
anotherFunction: function() {
var that = this;
// later
that.getAllProducts();
}
};

即使缓存了 this 指针,它的值仍然可以在此时更改,因为函数的上下文可以通过 bind、apply 和 call 等方法更改this 指针增加了很多复杂性和出错的空间。程序员应该讨厌的两件事。这就是为什么我推荐我提到的第一种方法。

关于javascript - 如何从函数内引用对象属性(该属性也是服务工厂中的对象属性),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32449873/

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