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不管在什么时候使用,都是相同的。
时间: 2024-12-11 11:24:11