JS内置对象的原型不能重定义?只能动态添加属性或方法?
昨天马上就快下班了,坐在我对面的同事突然问我一个问题,我说“爱过”,哈哈,开个玩笑。情况是这样的,他发现JS的内置对象的原型好像不能通过字面量对象的形式进行覆盖,
只能动态的为内置对象的原型添加属性或方法,下面那个具体的例子说明:
var arr=[];
Array.prototype={
push:function(){
alert("");
}
};
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内置对象的原型不能重定义?只能动态添加属性或方法?的更多相关文章
- 4月5日--课堂笔记--JS内置对象
JavaScript 4.5 一. JS内置对象 1.数组Array a)创建语法1:var arr=new Array(参数); i. 没有参数:创建一个初始容量为0的数组 ii. ...
- JS内置对象有哪些?
JS内置对象分为数据封装类对象和其他对象 数据封装类对象:String,Boolean,Number,Array,和Object; 其他对象:Function,Arguments,Math,Date, ...
- JS内置对象-String对象、Date日期对象、Array数组对象、Math对象
一.JavaScript中的所有事物都是对象:字符串.数组.数值.函数... 1.每个对象带有属性和方法 JavaScript允许自定义对象 2.自定义对象 a.定义并创建对象实例 b.使用函数来定义 ...
- 5月15日上课笔记-js中 location对象的属性、document对象、js内置对象、Date事件对象、
location的属性: host: 返回当前主机名和端口号 定时函数: setTimeout( ) setInterval() 二.document对象 getElementById(); 根据ID ...
- js课程 3-9 js内置对象定时器和超时器怎么使用
js课程 3-9 js内置对象定时器和超时器怎么使用 一.总结 一句话总结:定时器: 1.定义 sobj=setInterval(func,1000); 2.清除 cl ...
- js课程 2-8 js内置对象有哪些
js课程 2-8 js内置对象有哪些 一.总结 一句话总结:JS中内置了17个对象,常用的是Array对象.Date对象.正则表达式对象.string对象.Global对象. 1.js常用对象有哪些? ...
- JS 内置对象 String对象
JS内置对象 String对象:字符串对象,提供了对字符串进行操作的属性和方法. Array对象:数组对象,提供了数组操作方面的属性和方法. Date对象:日期时间对象,可以获取系统的日期 ...
- web前端学习(四)JavaScript学习笔记部分(6)-- js内置对象
1.JS内置对象-什么是对象 1.1.什么是对象: JavaScript中的所有事物都是对象:字符串.数值.数组.函数 每个对象带有属性和方法 JavaScript允许自定义对象 1.2.自定义对象: ...
- js内置对象的常用属性和方法(Array | String | Date | Math)
js内置对象:Array String Math Date <!DOCTYPE html> <html lang="en"> <head> ...
随机推荐
- NetBeans配置Xdebug 远程调试PHP
1.配置PHP 说明:xdebug.trace_output_dir和xdebug.profiler_output_dir需要增加权限 #chmod 755 /usr/xdebug-tmp xdebu ...
- STM32与PC机串口通讯
有时要将板子的信息输出到电脑上来调试之类的,或者把传感器收集到的数据显示到电脑. 当然了,这只是最基本的串口通信,简单的说,是有一根USB线连着的. mbed上并没有能显示printf的功能.需要自己 ...
- quarz入门案例
介绍 Quartz框架是一个全功能.开源的任务调度服务,可以集成几乎任何的java应用程序—从小的单片机系统到大型的电子商务系统.Quartz可以执行上千上万的任务调度. 核心概念 Quartz ...
- VS2010调用halcon的时候出现试图加载格式不正确的程序(this.hWindowControl1 = new HalconDotNet.HWindowControl();)
[重要错误修改] /// <summary> /// 设计器支持所需的方法 - 不要 /// 使用代码编辑器修改此方法的内容. /// </summary> private v ...
- FatMouse' Trade(Hdu 1009)
Description FatMouse prepared M pounds of cat food, ready to trade with the cats guarding the wareho ...
- springMVC的多文件的异步上传实现
springMVC的MultipartFile与传统的ajax文件上传兼容性不好,采用如下的ajax方法,后台无法获取文件. $.ajax({ url: '/upload', type: 'POST' ...
- web页面在ios下不支持fixed可用absolute替代的方案
本文引用出处:http://www.cnblogs.com/PeunZhang/p/3553020.html. 对于 ios4 和 android2.2 以下不支持 position:fixed 的问 ...
- 【原创】12. MYSQL++之Template Query
1. 什么是Template Query 在我们实际的编程过程中,我们很容易碰到printf这类需要在运行时来决定到底打印出什么的函数,例如 printf(“hello %s”, sth); 在这个例 ...
- NOIP2012摆花
题目描述 小明的花店新开张,为了吸引顾客,他想在花店的门口摆上一排花,共 m 盆.通过调查顾客的喜好,小明列出了顾客最喜欢的 n 种花,从 1 到 n 标号.为了在门口展出更多种花,规定第 i 种花不 ...
- libevent源码深度剖析五
libevent源码深度剖析五 ——libevent的核心:事件event 张亮 对事件处理流程有了高层的认识后,本节将详细介绍libevent的核心结构event,以及libevent对event的 ...