对象字面量内的属性可以直接引用另一个属性么?

js 通过对象字面量创建对象非常简单,譬如:

var a = {
    p1: [1]
};

但是这种方式有另一个缺点,

如果要在对象字面量内定义另一个属性譬如 p2 引用 p1 的话,非常不方便,

所以通常都是在字面量外去引用,譬如:

var a = {
    p1: [1]
};
a.p2 = a.p1

当然这样降低了可读性,如果非要在对象字面量内写的话,可能要这样,不过这里 p2 实际上是访问器属性:

var a = {
    p1: [1],
    get p2(){return this.p1},
    set p2(v){this.p1=v}
}

bV2nOB?w=185&h=112

如果对 js 不太熟悉,可能会想是不是有这样的代码可行?

var a = {
    p1: [1],
    p2: a.p1//this.p1
};
实际上都是不行的,因为对象字面量里 this 和 a 都是从作用域链中去寻找的,ES6之前只有两个作用域,全局或函数,在这里,没有函数,就是全局作用域,所以 this 和 a 就会从当前全局作用域中去寻找,这个可以通过下面代码验证:
window.p1=1;
var a = {
    p1: [1],
    p2: this.p1
};
a.p2// 1 ,全局作用域中,浏览器端 this 指向window,所以a.p2被 window.p1 赋值

再考虑下面代码:

var a={p1:111};
var a = {
    p1: [1],
    p2: a.p1
};
a.p2//111

这个稍微复杂些,在这个赋值表达式里

1、先获得 a 的引用,此时 a 还是指向 {p1:111}
2、计算右值,通过 var a={p1:111}; 和 a.p1 得出p2=111,p1=[1]
3、把 a 重新指向这个对象;

所以这里 a 也是之前的 a 无法引用自身。(关于赋值执行顺序,可以参考这篇博客,)

如果把第一行的 a 去掉,就会报错,考虑下面代码:

var b={p1:111};
var a = {
    p1: [1],
    p2: a.p1// 在这里计算 a.p1值的时候,由于 var 的变量提升,这里 a 被提前声明,不过值是 undefined,所以报错:Cannot read property 'p1' of undefined
};

上面的代码实际相当于:

var a,b;//赋值前值为undefined
b={p1:111};
a = {
    p1: [1],
    p2: a.p1//报错因为 a 是 undefined,获取 undefined 的属性会报错
};

转载于:https://www.cnblogs.com/xianshenglu/p/8324631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
提供的源码资源涵盖了安卓应用、小程序、Python应用和Java应用等多个领域,每个领域都包含了丰富的实例和项目。这些源码都是基于各自平台的最新技术和标准编写,确保了在对应环境下能够无缝运行。同时,源码中配备了详细的注释和文档,帮助用户快速理解代码结构和实现逻辑。 适用人群: 这些源码资源特别适合大学生群体。无论你是计算机相关专业的学生,还是对其他领域编程感兴趣的学生,这些资源都能为你提供宝贵的学习和实践机会。通过学习和运行这些源码,你可以掌握各平台开发的基础知识,提升编程能力和项目实战经验。 使用场景及目标: 在学习阶段,你可以利用这些源码资源进行课程实践、课外项目或毕业设计。通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的可运行性和易用性,特别注意了以下几点:首先,每份源码都提供了详细的运行环境和依赖说明,确保用户能够轻松搭建起开发环境;其次,源码中的注释和文档都非常完善,方便用户快速上手和理解代码;最后,我会定期更新这些源码资源,以适应各平台技术的最新发展和市场需求。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值