对象继承其他对象的方法和属性
Posted 盖大楼
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象继承其他对象的方法和属性相关的知识,希望对你有一定的参考价值。
顶一个扩展函数,用来将第二个参数及以后的属性、方法拷贝给第一个函数;
<script> // var extend=(function(){}()); 这是格式 var extend=(function(){ var p; var result=p in {toString:null}; if(result){ //检测p是否存在toString属性,这是一个检测 看是否可以可枚举 所以用toString这个为代表 return function extend(o){ for(var i=1;i<arguments.length;i++){ //这里采用i=1 开始 是因为第一位0 是o;后面的所有存在的函数都是为o提供方法和属性的,给o扩展; var source=arguments[i]; for(var prop in source){ o[prop]=source[prop]; //这里才是复制属性方法给o; } } return o; }; } //如果p不存在 可以枚举到toString else{ return function pathed_extend(o){ for(var i=1;i<arguments.length;i++){ var source=arguments[i]; for(var prop in source){ o[prop]=source[prop]; }; }; // 这里定义要检查的特殊属性 之前没法自动枚举到 var protoprops=[‘toString‘,‘valueOf‘,‘constructor‘,‘hasOwnproperty‘,‘isPrototypeOf‘,‘propertyIsEnmerable‘,‘toLocalString‘]; for(var j=0;j<protoprops.length;j++){ prop=protoprops[j]; if(source.hasOwnProperty(prop)){ o[prop]=source[prop]; } } return o; } } }()); //测试 定义一个空对象 var arr={}; var b={ speak:‘1‘, name:‘b‘, run:function(){ var that=this; alert(this.name+‘正在run‘); } }; var c={ sleep:function(){ alert(‘睡觉‘); } } //arr.run(); //未拷贝之前 报错 extend(arr,b); //拷贝b的方法和属性 arr.name="arr"; //自定义新的属性 arr.run(); //测试拷贝的方法 extend(arr,b,c); //测试多个参数 能不能继承到C的方法 arr.sleep(); //可以 </script>
以上是关于对象继承其他对象的方法和属性的主要内容,如果未能解决你的问题,请参考以下文章