js动态为对象添加属性和方法
Posted
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了js动态为对象添加属性和方法相关的知识,希望对你有一定的参考价值。
在线等,求代码
乱七八糟的一堆,我已经搞定了,100分送给有缘人了,谁能敲到边鼓,我就给分。
简单的补个例子上,希望楼主能把addMethods的第二个参数大致有几种情况写清楚。
我再把我的答案补充完整
//判断类型的方法var isType = function(object)
return Object.prototype.toString.call(object)
.match(/^\\[object\\s(.*)\\]$/)[1];
var addMethods = function(obj, arr)
if(isType(obj) !== 'Object')
return alert('第一个参数必须是对象!');
//TODO
追问
第二个参数就是数组,js不是弱语言嘛,我现在就没个思路,还请大侠帮忙。
参考技术A 用 对象[属性名]=xx的方式如 person=;
for XX in XX
person[property]=“”“ 参考技术B var str = "'a'"+":"+"'2'";
var json_obj = eval('('+str+')'); 参考技术C 参考技术D var obj = ;//一个js对象
obj.test = function()//添加方法
//需要做的事情.....
obj.a = 5;//添加属性
你的补充问题其实是没有意义的,因为js本来就是动态的,它可以给任何对象在任何时候添加属性和方法
追问你说的不是我想要的答案,谢谢。
追答好吧!还是你牛B
JS内置对象的原型不能重定义?只能动态添加属性或方法?
昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑。情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖,
只能动态的为内置对象的原型添加属性或方法,下面那个具体的例子说明:
var arr=[]; Array.prototype={ push:function(){ alert("1"); } }; arr.push(); //没有任何输出
有人可能会说了“你先定义的arr,后来又修改了Array.prototype,这时Array.prototype.__proto__===Object.prototype,而arr.__proto__===[],所以arr找不到push方法”;那好这次我们把arr的定义放到Array.prototype的后面:
Array.prototype={ push:function(){ alert("1"); } }; var arr=[]; arr.push(); //输出0,因为arr是空数组,而且push没有传入任何参数,所以返回arr的length,即0
看到了吧,arr调用的还是数组的原push方法,而不是Array.prototype的push方法,有人可能又要说了“内置对象是可以覆盖的,但是需要手动的为原型设置constructor,像这样constructor:Array”,好~,既然你们说了,那我们就再来看看:
var arr=[]; Array.prototype={ constructor:Array, push:function(){ alert("1"); } }; arr.push(); //毛也没输出啊
死心了吧,嘿嘿,这是内置构造器,不是我们自定义的构造器,所以该方法是行不通的
那么只有一个结论了,那就是“JS内置对象的原型不能整体覆盖,只能单独地动态地为原型添加属性或方法”,那么如何动态呢,就像这样:
//无论arr放到那,Array.prototype.push的上面或下面都可以,push都能覆盖Array原型的原push方法
var arr=[];
//这就是动态 Array.prototype.push=function(){ alert("1"); } arr.push(); //此处提示“1”,有截图为证
结语:希望大家不要被我搞糊涂,如有错误,还请各位多多指教,在此谢过
以上是关于js动态为对象添加属性和方法的主要内容,如果未能解决你的问题,请参考以下文章