function myFunc() {
omaps: function tes() {
return this.parent.x + this.parent.y;
}
}
var myobj = {
x: 1,
y: 2,
z: myFunc()
}
window.alert(myobj.z);
返回undefined
function myFunc() {
omaps: function tes() {
return myobj.x + myobj.y;
}
}
var myobj = {
x: 1,
y: 2,
z: myFunc()
}
window.alert(myobj.z);
返回undefined
var myobj = {
x: 1,
y: 2,
z: {
omaps: function() {
return myobj.x + myobj.y;
}
}
}
window.alert(myobj.z);
返回[object,Object]
从上面的片段中我得到一个带有undefined或[object,Object]而不是值3的返回。
如何返回我预期的值?我做对还是错?
答案 0 :(得分:0)
在前两个示例中,您得到 undefined ,因为分配给 myobj.z 的值是调用 myFunc 的结果。
该函数没有return语句,因此返回 undefined ,这是分配给 myobj.z 的值。
在第三个示例中,您要将对象分配给 myobj.z ,因此您会看到调用从 Object继承的 toString 方法的结果构造函数(即Object.prototype上的那个),返回'[object Object]'
。
您可能想要做的是:
// Function assumes *this* will be set in the call
function myFunc() {
return this.x + this.y;
}
var myobj = {
x: 1,
y: 2,
z: myFunc // note assignment, no ()
}
window.alert(myobj.z()); // Note *this* must be set in the call and z must be called
您还可以使用getter(在现代浏览器中支持):
var myobj = {
x: 1,
y: 2,
get z(){
return this.x + this.y;
}
}
window.alert(myobj.z) // 3
答案 1 :(得分:0)
您可以将该功能分配给myobj.z
并使用this.x
和this.y
来获取属性并通过调用myobj.z()
来获取值
function myFunc() {
return this.x + this.y;
}
var myobj = {
x: 1,
y: 2,
z: myFunc
}
window.alert(myobj.z());
另一种方法是传递函数中的对象以获取属性并将返回值分配给myobj.z
,如下所示
function myFunc(obj) {
return obj.x + obj.y;
}
var myobj = {
x: 1,
y: 2,
z: myFunc(myobj)
}
window.alert(myobj.z);