我在Angular.js
模块中有这个对象声明:
$scope.test=function(){
};
$scope.test.prototype.push = function(data) {
return data;
};
我称之为:
var a = $scope.test.push(1);
console.error(a);
但是我收到了这个错误:
Error: undefined is not a function (evaluating '$scope.test.push(1)')
为什么我无法访问通过Prototype
添加到我的对象的方法?
答案 0 :(得分:1)
您似乎误将函数的原型属性与对象的内部原型混淆。
书籍Eloquent Javascript的相关引用:
重要的是要注意原型与构造函数关联的方式(通过其
prototype
属性)与对象具有原型的方式之间的区别(可以使用Object.getPrototypeOf
)。构造函数的实际原型是Function.prototype
,因为构造函数是函数。它的prototype
属性将是通过它创建的实例的原型,但不是它的自己的原型。
这在您的代码示例的上下文中意味着什么:
$scope.test.prototype.push = function(data) {
return data;
};
这里你已经为$scope.test
函数的prototype属性添加了一个push函数,它将出现在使用这个测试函数作为构造函数创建的对象原型上({{1} }关键字)。
new
仍然是一个空函数,它没有$scope.test
方法,导致错误。如果要向每个函数添加一个push方法,可以使用Function.prototype(注意Function是用于创建新函数的构造函数),但我不知道我们要去哪里有这个。