为了账号安全,请及时绑定邮箱和手机立即绑定

JS 内部对象使用外部对象的属性,该怎么写?

JS 内部对象使用外部对象的属性,该怎么写?

萧十郎 2019-03-14 22:15:09
想实现:button里的text用o里的text。var o = {    text: '保存',    buttons: [{        text: o.text    }]};这样写,Console 会报错,TypeError: Cannot read property 'text' of undefined。并且,我想text,button属性一次性全放在对象o里定义,有方法没?
查看完整描述

7 回答

?
Helenr

TA贡献1780条经验 获得超4个赞

var o = {

  text: '保存',

  button: [{

    text: setTimeout(function(){o.button[0].text = o.text}, 0)

  }]

}

问题在于访问 o.text 时 o 的定义还未执行完成 利用 setTimeout 延迟执行赋值操作可以达到效果


查看完整回答
反对 回复 2019-04-13
?
慕尼黑8549860

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();

https://img1.sycdn.imooc.com//5cb181340001db1d03290070.jpg

查看完整回答
反对 回复 2019-04-13
?
www说

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();

https://img1.sycdn.imooc.com//5cb1814900019fe802190069.jpg


貌似 ECMAScript6 的 observe 方法可以解决这类问题,就不需要强制改为引用值:


Object.observe(todoModel, function(changes) {

  ...

}


查看完整回答
反对 回复 2019-04-13
?
陪伴而非守候

TA贡献1757条经验 获得超8个赞

var text = '保存';

var o = {

    text: text,

    buttons: [{

        text: text

    }]

};

这样就不会报错了,不知道是不是你想要的


查看完整回答
反对 回复 2019-04-13
?
ABOUTYOU

TA贡献1812条经验 获得超5个赞

你这个概念是不是o是父类,下面有很多子类button,子类继承父类的属性即可。

你可以写一个inherit函数,把父类所有的属性复制到子类。

关于继承的方法网上也有很多


查看完整回答
反对 回复 2019-04-13
  • 7 回答
  • 0 关注
  • 1083 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号