扩展内建对象:

在javascript中,内建对象的构造函数都是可以通过其原型来进行扩展的。这意味着我们可以做一些事情,例如我们要往数组原型中添加一个新方法,就可以在其所有的数组中使用,下面我们来试试看。

我们要向数组原型中添加一个用于查询数组中是否存在某个特定的值,类似于indexOf();

  1. Array.prototype.inArray = function(a){
  2. for(var i=0,len=this.length;i<len.length;i++){
  3. if(this[i] === a){
  4. return true;
  5. }
  6. }
  7. return false;
  8. }

现在,所有数组对象都拥有inArray方法了,我们来试一下:

  1. var arr = ['Anna', 'Jok', 'Yan'];
  2. arr.inArray('Anna'); // truearr.inArray('aaa'); // false

再来一个,假设我们需要一个反转字符串的功能,毕竟数组Array有一个reverse()方法,那么给字符串也来一个吧:

  1. String.prototype.reserve = function(){
  2. return Array.prototype.reverse.apply(this.spilt('')).join('');
  3. }
  4. 'abcdefg'.reserve(); // gfedcba;

她们真是个好方法,功能很强大,但是有点吓人。

值得注意的是,当您用自定义方法扩展的时候,首先应该检查该方法是不是已经存在。再说现在浏览器更新速度辣么快,下面一个例子应该可以避免这种事发生吧:

  1. if(typeof String.prototype.trim !=== 'function'){
  2. String.prototype.trim = function(){
  3. return this.replace(/^\s/)
  4. }
  5. }

就是如此之类的方法。。。 如果您想为某个原型添加自定义属性,请务必检测这个属性是否已经存在!!!

javascript --- 原型初探七日谈(二)的更多相关文章

  1. javascript --- 原型初探七日谈(一)

    在javascript中,像原型,闭包这样的概念,只要我们能领悟其中的原理,一切都会显得格外清晰与明了. 原型属性(prototype): 下面我们简单定义一个函数 function her(a, b ...

  2. javascript --- 原型初探七日谈(三)

    原型陷阱: 在处理原型问题上时,我们要注意两种行为. 1. 当我们对原型对象执行完全替换的时候,有可能会触发原型链的某种异常. 2. prototype.constructor 属性是不可靠的. 下面 ...

  3. javascript --- 继承初探七日谈 (一)

    原型链是javascript实现继承的默认方式.下面来一个例子看一下她的魔法吧: 首先定义三个构造函数: function her(){ this.name = 'Anna'; this.toStri ...

  4. JavaScript 原型链 OOP(二)

    原型对象 `prototype` -  原型对象的所有属性和方法,都能被实例对象共享;   JavaScript 通过构造函数生成新对象,因此构造函数可以视为对象的模板.实例对象的属性和方法,可以定义 ...

  5. javascript 函数初探 (二)--- 那些年的预定义函数

    javascript的预定义函数: javascript引擎中有一组可以随时调用的内建函数. 这些内建函数包括: 1. parseInt() 2. parseFloat() 3. isNaN() 4. ...

  6. javascript 对象初探(二)--- 返回对象的函数

    除了使用new操作符调用构造函数以外,我们也可以抛开new操作符,只用一般函数来创建对象,这样就能执行某些预备工作,并已对象为返回值的函数.. function her(){ return { nam ...

  7. javascript原型Prototype【转】

    转自:http://www.cnblogs.com/starof/p/4190404.html 在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同 ...

  8. javascript原型Prototype

    在javaScript创建对象一文中提到过:用构造函数创建对象存在一个问题即同一构造函数的不同实例的相同方法是不一样的,所以我们用原型把构造函数中公共的属性和方法提取出来进行封装,达到让所有实例共享的 ...

  9. 【读书笔记】读《编写高质量代码—Web前端开发修炼之道》 - JavaScript原型继承与面向对象

    JavaScript是基于原型的语言,通过new实例化出来的对象,其属性和行为来自于两部分,一部分来自于构造函数,另一部分是来自于原型.构造函数中定义的属性和行为的优先级比原型中定义的属性和优先级高, ...

随机推荐

  1. Python并发(二)

    并发是指一次处理多件事,而并行是指一次做多件事.二者不同,但互相有联系.打个比方:像Python的多线程,就是并发,因为Python的解释器GIL是线程不安全的,一次只允许执行一个线程的Python字 ...

  2. 强大的with语句

    上下文管理器对象存在的目的是管理 with 语句,就像迭代器的存在是为了管理 for 语句一样. with 语句的目的是简化 try/finally 模式.这种模式用于保证一段代码运行完毕后执行某项操 ...

  3. 《Scrum实战》第1课【知易行难】全团课后任务汇总

          1组 孟帅(班长)   kecyru 2017-7-5 http://kecyru.blog.163.com/blog/static/27416617320176411513013 htt ...

  4. python 学习分享-文件操作篇

    文件操作 f_open=open('*.txt','r')#以只读的方式(r)打开*.txt文件(需要与py文件在同一目录下,如果不同目录,需写全路径) f_open.close()#关闭文件 打开文 ...

  5. django html render_to_response

    #coding=utf-8 from django.shortcuts import render from blog.models import BlogPost from django.short ...

  6. List容器——LinkedList及常用API,实现栈和队列

    LinkedList及常用API ①   LinkedList----链表 ②   LinkedList类扩展AbstractSequentialList并实现List接口 ③   LinkedLis ...

  7. 【Bzoj3944】杜教筛模板(狄利克雷卷积搞杜教筛)

    题目链接 哇杜教筛超炫的 有没有见过$O(n^\frac{2}{3})$求欧拉函数前缀和的算法?没有吧?蛤蛤蛤 首先我们来看狄利克雷卷积是什么 首先我们把定义域是整数,陪域是复数的函数叫做数论函数. ...

  8. 刷题总结——array(ssoj)

    题目: 题目描述 给定 2 个正整数序列 A1, A2,序列长度分别为 L1, L2.你可以进行以下的一次操作:1. 选择两个数 K1,K2(1≤K1≤L1, 1≤K2≤L2):2. 移去 A1 中最 ...

  9. [HAOI2007] 理想的正方形 (单调队列)

    题目链接 Solution MD,经过这道题,算是掌握单调队列了... 可以先预处理出点 \((i,j)\) 往上 \(n\) 的最大值和最小值. 然后再横着做一遍单调队列即可. Code #incl ...

  10. JDK7的maven项目切换到JDK8全纪录

    今天花了一个下午的时间,将一个之前用JDK7写的web项目升级到了JDK8,这个过程中遇到了许多麻烦,在这里简单的记录一下,方便日后查看. 1.下载JDK8并且配置,这个我就不说了,反正大家都知道,需 ...