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”,有截图为证

结语:希望大家不要被我搞糊涂,如有错误,还请各位多多指教,在此谢过

时间: 2024-07-30 13:40:09

JS内置对象的原型不能重定义?只能动态添加属性或方法?的相关文章

JS内置对象-String对象、Date日期对象、Array数组对象、Math对象

一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义对象,然后创建新的对象实例 二.JS内置对象-String 1.string对象 string对象用于处理已有的字符串 字符串可以使用单引号或者双引号 2.indexOf( )  在字符串中查找字符串,如果匹配成功返回首字母所在的位置,否则返回-1 3.match() 匹配成功,返回匹配成功的数组,

5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、

location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID值获取一个DOM对象 getElementsByName(); 根据name属性值获取多个Dom对象 getElementsByTagName(); 根据标签获取多个DOM对象 获取标签体内容 innerHTML 获取input的value值 value 获取下拉框选中的值 value this 代

JS 内置对象 String对象

JS内置对象   String对象:字符串对象,提供了对字符串进行操作的属性和方法.   Array对象:数组对象,提供了数组操作方面的属性和方法.   Date对象:日期时间对象,可以获取系统的日期时间信息.   Boolean对象:布尔对象,一个布尔变量就是一个布尔对象.(没有可用的属性和方法)   Number对象:数值对象.一个数值变量就是一个数值对象.   Math对象:数学对象,提供了数学运算方面的属性和方法. String对象的属性和方法   length:获取字符串的长度.如:v

4月8日--课堂笔记--JS内置对象

JavaScript Day8 一.    JS内置对象 字符串String a) 属性length:字符数量,不管是ASCII还是Unicode,都算1个字符 b) 查询方法: i.           charAt:根据索引位置查找字符,可以用[索引]代替(除了旧版IE) ii.           charCodeAt:根据索引位置查找字符编码 iii.           indexOf:根据字符(串)查找首次出现位置,如果找不到则返回-1:不指定第二个起始位置时从头开始查找,如果指定则

js内置对象总结

在js里,一切皆为或者皆可以被用作对象.可通过new一个对象或者直接以字面量形式创建变量(如var i="aaa"),所有变量都有对象的性质. 注意:通过字面量创建的对象在调用属性和方法时会被对象包装器暂时包装成一个对象,具有对象的性质.如 var str="我不是一个真的对象"; alert(str.length);     //str被暂时包装成一个String对象,可调用该对象的属性和方法 不过这并不意味着它就是一个对象了,typeof(i)的值为仍Strin

js内置对象处理-打印学生成绩单

效果图: 任务: 1.通过js的内置对象得到当前日期 var date=new Date(); var year=date.toString().slice(11,15); document.write(year.toString()+"年"); var month=date.getMonth(); month=month+1; if(month<10){ document.write("0"+month+"月"); }else{ docu

巧用JS内置对象Function

在做练习的时候也好,做项目的时候也好,我经常会碰到想要的到一个字符串“”里面的东西的这样的需求. 注意,“”里面的东西可以是任何东西[],number等等 于是有了个大神教我一个绝招: 于是世界圆满了... 其实Function就是js的一个内置对象. 这里有个文章讲的挺好的 http://www.cnitblog.com/yemoo/archive/2007/09/25/34017.html

js内置对象-Math对象

内置对象:就是js语法中,内置的一些对象 提供很多的属性和方法,可以直接用1.Math对象:提供了一系列和数学相关的属性和方法 (1)PI => Math.pI (2)min,max 求最大值和最小值 =>Math.max (); Math.min () (3)取整:ceil天花板函数,向上取整,取大的那个值 => Math.ceil() floor地板函数,向下取整,取小的那个值 => Math.floor() round四舍五入 离哪个近,取哪个 => Math.roun

JS内置对象练习(慕课网题目)

效果图: XXXX年XX月X日 星期X--班级总分为:81 格式要求: 1.显示打印的日期. 格式为类似"XXXX年XX月XX日 星期X" 的当前的时间. 2.计算出该班级的平均分(保留整数). 同学成绩数据如下: "小明:87; 小花:81; 小红:97; 小天:76;小张:74;小小:94;小西:90;小伍:76;小迪:64;小曼:76" 我的解答 <!DOCTYPE html> <html lang="en"> &l