getBoundingClientRect的返回值如何不可变

How is return value of getBoundingClientRect Immutable?

本文关键字:不可变 返回值 getBoundingClientRect      更新时间:2023-09-26

这里有一些有趣的事情:在任何JS窗口运行中:

val = document.body.getBoundingClientRect();
console.log(val)
val.left += 10;
console.log(val)

或对返回值的任何其他修改。此对象如何不可变?

这使得很难对元素的getBoundingClientRect()进行攻击,从而更改原始值。虽然我想你可以重新创建对象,但我不知道JS甚至具有不可变对象的能力。这是对的吗?

只是一个简单的例子:

var getBoundingNothing = {left:20};
Object.freeze( getBoundingNothing );        // if you comment this line...
var gbn = getBoundingNothing;
console.log( gbn ); //  Object { left=20 }
gbn.left = 70 ;
console.log( gbn ); //  Object { left=20 }  // ...than left=70

考虑阅读这篇有趣的文章:http://ejohn.org/blog/ecmascript-5-objects-and-properties/

从那篇文章中,你所需要的一切,直接进入MDN:
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/freeze