js 内建对象的拓展 shim/polyfill ( 内含js 判断对象的属性是否存在的方法)
原创
©著作权归作者所有:来自51CTO博客作者朝阳39的原创作品,请联系作者获取转载授权,否则将追究法律责任
通过内建对象的原型,可以为内建对象拓展一些实用的方法
- 范例1 —— 检测指定元素是否在数组中 inArray()
Array.prototype.inArray = function(needle) {
for (var i = 0, len = this.length; i < len; i++) {
if (this[i] === needle) {
return true;
}
}
return false;
};
> var colors = ['red', 'green', 'blue'];
> colors.inArray('red');
true
> colors.inArray('yellow');
false
String.prototype.reverse = function() {
return Array.prototype.reverse.apply(this.split('')).join('');
};
> "bumblebee".reverse();
"eebelbmub"
js 内建对象拓展的使用场景
让老式浏览器支持已被ECMAScript委员会标准化了的、为现代浏览器所实现的新功能,例如让旧版IE支持ES5中的方法,通常这类扩展叫作shim或者polyfill。
重要提醒:
尽可能的避免使用这项技术,避免引发js内建对象的功能混乱,特别是对于代码的维护者很不友好,容易导致无法预期的错误!
如果想要通过原型为某个对象添加一个新属性,务必先检查一下该属性是否已经存在。
js 判断对象的属性是否存在
1.in运算符 (属性名 in 对象)
var obj={a:1};
"a" in obj//true
var objA={a:1};
var objB=Object.create(A)
"a" in objB //true
总结:in运算符不仅能识别对象自身的属性 也能识别继承的属性
2. hasOwnProperty 只能识别对象自身的属性
var obj={a:1};
obj.hasOwnProperty("a")//true
obj.hasOwnProperty("toString")// false obj 本身没有toString属性