Javascript AngularJS表达式输出对象字符串值
假设我使用一个表示字符串值的类(更像一种结构),其副作用是每次访问它时它都会更改其值:Javascript AngularJS表达式输出对象字符串值,javascript,angularjs,Javascript,Angularjs,假设我使用一个表示字符串值的类(更像一种结构),其副作用是每次访问它时它都会更改其值: function Foo() { var value = 'a'; this.getValue = function() { if (value == 'a') { value = 'b'; return 'a'; } else { value = 'a';
function Foo() {
var value = 'a';
this.getValue = function() {
if (value == 'a') {
value = 'b';
return 'a';
}
else {
value = 'a';
return 'b';
}
}
}
…我重写了它的toString()
方法:
Foo.prototype.toString = function() {
return this.getValue();
}
使用直接引用输出此值可以:
var foo = new Foo();
alert(foo); //a
document.getElementById('bar').innerHTML = foo; //b
但是,使用AngularJS表达式输出对象会导致显示{}
,而不是toString()
/getValue()
值:
var foo = new Foo();
var app = angular.module('main', []);
app.controller('ctrl', function($scope) {
$scope.val = foo;
alert($scope.val); //a (has not been changed by previous line)
});
…然后:
<div ng-app="main" ng-controller="ctrl">{{val}}</div> //{} (rather than b)
{{val}}/{}(而不是b)
我可以使用$scope.val=foo.getValue()代码>,$scope.val=foo.toString()
甚至$scope.val=foo+''
,并根据ng bind
调用toString()
方法,但为什么在Angular对表达式中的对象求值时不调用该方法呢