7 回答
TA贡献1780条经验 获得超4个赞
var o = {
text: '保存',
button: [{
text: setTimeout(function(){o.button[0].text = o.text}, 0)
}]
}
问题在于访问 o.text 时 o 的定义还未执行完成 利用 setTimeout 延迟执行赋值操作可以达到效果
TA贡献1818条经验 获得超11个赞
Javascript 只有全局作用域和函数作用域,所以不存在内部对象访问外部对象的问题,实际上你的 o.text 访问的就是全局作用域下的 o.text,由于 o 此时尚未定义完全,所以 o 是 undefined,自然而然 o.text 就会抛出 Cannot read property 'text' of undefined 的错误。
这种情形下可以这样处理:
var Obj = function() {
var text = '保存',
buttons = [{ text: text }];
return {
text: text,
buttons: buttons,
}
};
var o = new Obj();

TA贡献1775条经验 获得超8个赞
var Obj = function(temp) {
var text = temp,
buttons = [{ text: text }];
return {
text: text,
buttons: buttons,
}
};
var o = new Obj('保存');
实现同步更新,可以这样操作:
var Obj = function() {
var text = {
value: '保存'
},
buttons = [{ text: text }];
return {
text: text,
buttons: buttons,
}
};
var o = new Obj();

貌似 ECMAScript6 的 observe 方法可以解决这类问题,就不需要强制改为引用值:
Object.observe(todoModel, function(changes) {
...
}
TA贡献1757条经验 获得超8个赞
var text = '保存';
var o = {
text: text,
buttons: [{
text: text
}]
};
这样就不会报错了,不知道是不是你想要的
TA贡献1812条经验 获得超5个赞
你这个概念是不是o是父类,下面有很多子类button,子类继承父类的属性即可。
你可以写一个inherit函数,把父类所有的属性复制到子类。
关于继承的方法网上也有很多
添加回答
举报
