且构网

分享程序员开发的那些事...
且构网 - 分享程序员编程开发的那些事

《JavaScript启示录》——1.17 动态属性支持易变对象

更新时间:2022-09-12 20:13:53

本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.17节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看

1.17 动态属性支持易变对象

复杂对象是由动态属性构成的。这使得用户自定义对象和大多数原生对象可以产生突变。这意味着JavaScript中的大多数对象都可以随时更新或更改。正因为如此,可以通过增加原生对象,来改变JavaScript本身的原生预配置特性。然而,我并不是建议大家这样做,事实上,我认为不应该这样做,但我们不能掩盖这些用法的有用之处。

也就是说,我们可以在原生构造函数上存储属性,并在原型对象上,向原生对象额外添加新方法。

如下代码,改变了String()构造函数和String.prototype。

<!DOCTYPE html><html lang="en"><body><script>

// 利用augmentedProperties属性扩展内置的String构造函数Function()
String.augmentedProperties = [];

if (!String.prototype.trimIT) { // 如果原型中没有trimIT(),就添加它
    String.prototype.trimIT = function () {
        return this.replace(/^\s+|\s+$/g, '');
}
    // 添加trimIT字符到augmentedProperties数组
    String.augmentedProperties.push('trimIT');
}
var myString = ' trim me ';
console.log(myString.trimIT()); // 调用自定义的trimIT方法,输出 'trim me'

console.log(String.augmentedProperties.join()); // 输出 'trimIT'

</script></body></html>

希望大家能够明白,JavaScript中的对象是动态的。这使得JavaScript中的对象是可以改变的。从本质上讲,整个JavaScript语言都可以变为自定义版本(例如trimIT方法)。再次说明,我不推荐这种做法,我只是指出它是JavaScript中对象特性的一部分。

注意

如果更改了JavaScript的原生内部运作机制,你可能会获得一个自定义版本的JavaScript来进行程序处理。但一定要谨慎,因为大多数人会认为JavaScript不管在什么时候使用,都是相同的。