Web 技术研究所

我一直坚信着,Web 将会成为未来应用程序的主流

IE8对Object.defineProperty的支持

  Object.defineProperty是ES5的东西,但实际上IE8就已经开始尝试支持了。虽然它还没有完全支持,用起来还有很大局限性,但至少在IE8时代这东西就已经存在了。使用Object.defineProperty可以在IE8上模拟实现一些现代浏览器在DOM元素上的新特性。
  下面这个实例代码是在IE8上为DOM元素添加textContent事件 <div></div>
<script>
-[1,]||(function(){
  var i,o,s=[
    "Unknown","UList","Title","TextArea","TableSection",
    "TableRow","Table","TableCol","TableCell","TableCaption",
    "Style","Span","Select","Script","Param","Paragraph",
    "Option","Object","OList","Meta","Marquee","Map","Link",
    "Legend","Label","LI","Input","Image","IFrame","Html",
    "Heading","Head","HR","FrameSet","Frame","Form","Font",
    "FieldSet","Embed","Div","DList","Button","Body",
    "Base","BR","Area","Anchor"
  ];
  for(i=0;i<s.length;i++){
    var o=window["HTML"+s[i]+"Element"];
    Object.defineProperty(o.prototype,"textContent",{
      get:function(){return this.innerText;},
      set:function(e){this.innerText=e;}
    });
  };
})();

//测试
onload=function(){
  document.querySelector("div").textContent="<h1>Hello World!</h1>";
};
</script>

  我们能做的当然也只是模式,上面这个实例是很简易的模拟。实际上innerTexttextContent这两个属性的工作方式完全不同,只是概念有点相似而已。
  Object.defineProperty的功能就是定义那些getter/setter属性。这么一来,很多东西就可以模拟现代浏览器实现了。但需要注意的是一些库是通过对象属性来判断兼容性的,自己去模拟实现一些属性可能会导致冲突。所以想用这种用法还要慎重点的。
网名:
52.91.185.*
电子邮箱:
仅用于接收通知
提交 悄悄的告诉你,Ctrl+Enter 可以提交哦
神奇海螺
[查看全部主题]
各类Web技术问题讨论区
发起新主题
本模块采用即时聊天邮件通知的模式
让钛合金F5成为历史吧!
次碳酸钴的技术博客,文章原创,转载请保留原文链接 ^_^