首页
学习
活动
专区
圈层
工具
发布

理解ECMAScript规范(2)

OrdinaryGet(O, P, Receiver)。 在调用访问器属性的获取函数(getter)时,Receiver将被用作this值。稍后还会看到。...Receiver参数在算法第8步是访问器属性的情况下才用到。在调用访问器属性的获取函数(getter)时,Receiver将被用作this值。...然后在5.b调用[[Get]],而Receiver是通过GetThisValue(V)传入的。这里,它就是引用的基础值。...综上所述,Receiver就是原始引用的基础值,这个值在原型链走查过程中保持不变。如果要找的是一个访问器属性,则在调用获取访问器时以这个Receiver作为this值。...第2步在这个引用上调用了GetValue。这样我们就知道了对象的内部方法[[Get]]会被调用,而原型走查也会发生。

57431
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    细数 TS 中那些奇怪的符号

    TS 代码中,我们使用了非空断言,使得 const b: number = a!...2.2 可选链与函数调用 当尝试调用一个可能不存在的方法时也可以使用可选链。在实际开发过程中,这是很有用的。系统中某个方法不可用,有可能是由于版本不一致或者用户设备兼容性问题导致的。...b / someMethod() 表达式中的除法运算或 someMethod 的方法调用。 三、?? 空值合并运算符 在 TypeScript 3.7 版本中除了引入了前面介绍的可选链 ?....的关系 空值合并运算符针对 undefined 与 null 这两个值,可选链式操作符 ?. 也是如此。可选链式操作符,对于访问属性可能为 undefined 与 null 的对象时非常有用。...当然你也可以在 JavaScript 的环境中使用它,但你需要借助 Babel,在 Babel 7.8.0 版本也开始支持空值合并运算符。 四、?

    7K32

    vue3源码解析--数据监听篇

    属性的getter和setter,使实例在使用value属性时分别触发track和trigger方法,实现依赖收集和触发更新 computed方法依托于ComputedImpl实现类,完成对getter...ref,则新值的赋值需要赋在老值的value属性上 相信这块对于已经熟练使用ref的同学来说,非常容易理解 既然已经重新赋值,且ref数据会单独走一套trigger逻辑 就无须再触发一次trgger,直接...随后我们可以看到关于value属性的getter和setter 其中getter核心逻辑就是触发数据追踪也就是track 而setter的核心逻辑则是触发数据更新也就是trigger 这也解释了为何我们在日常使用...new Array(object.length) : {} // 创建一个空值,等长数组或者一个空对象 for (const key in object) { ret[key] = toRef...函数执行的结果 值得注意的是传入第二个参数中的调度器 我们可以看到调度器中触发trigger 这意味着computed的getter可以在getter函数内部依赖的其他响应式数据的更新时更新自身值 而getter

    2K10

    【前端】:对象、原型、继承

    数据描述符是一个具有值的属性,该值可能是可写的,也可能不是可写的。存取描述符是由getter-setter函数对描述的属性。描述符必须是这两种形式之一,不能同时是两者。 ? ?...会创建一个“密封”的对象,这个方法实际上会在一个现有对象上调用 Object.preventExtensions(...) 并把所有现有属性标记为 configurable: false。...会创建一个冻结对象,这个方法会在一个现有对象上调用 Object.seal(...) 并把所有“数据访问”属性标记为 writable:false,这样就无法修改它们值。...几乎所有的对象在创建时 [[Prototype]] 属性都会被赋予一个非空的值。 2.1. Object.prototype [[Prototype]]的尽头是哪里?...函数本身并不是构造函数,然而,当你在普通的函数调用前面加上 new 关键字之后,就会把这个函数调用变成一个“构造函数调用”。实际上,new 会劫持所有普通函数并用构造对象的形式来调用它。

    1.4K50

    《你不知道的JavaScript》-- 对象(笔记)

    3)密封 Object.seal(...)会创建一个“密封”对象,这个方法实际上会在一个现有对象上调用Object prevent.Extensions(...)...4)冻结 Object.freeze(...)会创建一个冻结对象,这个方法实际上会在一个现有对象上调用Object.seal(...)并把所有“数据访问”属性标记为 writable: false,这样就无法修改它们的值...“深度冻结”一个对象,首先在这个对象上调用Object.freeze(...),然后遍历它引用的所有对象并在这些对象上调用Object.freeze(...)。...在ES5中可以使用getter和setter部分改写默认操作,但是只能应用在单个属性上,无法应用在整个对象上。...getter是一个隐藏函数,会在获取属性值时调用,setter也是一个隐藏函数,会在设置属性值时调用。

    95620
    领券