美文网首页
JavaScript-通过原型扩展内建对象

JavaScript-通过原型扩展内建对象

作者: neromaycry | 来源:发表于2017-06-06 17:46 被阅读50次
JavaScript-通过原型扩展内建对象

我们知道,JavaScript中的内建对象分为以下三种:

  • 数据封装类对象——包括Object, Array, Boolean, Number和String。

  • 工具类对象——包括Math, Date, RegExp等用于提供便利的对象。

  • 错误类对象——包括一般性错误对象以及其他各种更特殊的错误类对象。

以上对象,都可以通过其原型来进行扩展,比如添加一些自定义的方法。

我们以扩展Array对象来举例,在Array对象中自定义shuffle()方法,实现随机打乱数组的功能。代码如下:

 Array.prototype.shuffle = function () {

            var temp_arr_1 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_1[i] = i;
            }

            var temp_arr_2 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_2[i] = temp_arr_1.splice(Math.floor(Math.random() * temp_arr_1.length), 1);
            }

            var temp_arr_3 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_3[i] = this[temp_arr_2[i]];
            }
            return temp_arr_3;

        }

这时我们就已经实现了扩展内置对象。可是...
我们似乎遗漏了点什么——如果我们自定义的方法与浏览器内存在同名内建方法时,该怎么办?这个时候我们希望可以直接调用原生方法,避免方法的覆盖。于是,我们需要在自定义方法之前加一句判断,修改一下代码:

if (typeof Array.prototype.shuffle !== 'function') {

        Array.prototype.shuffle = function () {
            var temp_arr_1 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_1[i] = i;
            }

            var temp_arr_2 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_2[i] = temp_arr_1.splice(Math.floor(Math.random() * temp_arr_1.length), 1);
            }

            var temp_arr_3 = new Array();
            for (var i = 0; i < this.length; i++) {
                temp_arr_3[i] = this[temp_arr_2[i]];
            }
            return temp_arr_3;

        }
    }

如此,我们便达到了通过原型扩展内建对象的目的。

相关文章

  • JavaScript-通过原型扩展内建对象

    我们知道,JavaScript中的内建对象分为以下三种: 数据封装类对象——包括Object, Array, Bo...

  • JavaScript-对象_原型

    问题1: OOP 指什么?有哪些特性 OOP(Object-Oriented-Programming),指面向对象...

  • 十三、扩展内建对象

    在JavaScript中内建对象的构造器函数(例如Array、String、Object、Function)都可以...

  • js 原型 2019-12-15

    原型:constructor 构造函数、实例、原型对象三者之间的关系 原型链 原型对象中的this指向 扩展内置对...

  • DAY4

    原型对象的应用 扩展内置对象方法 注意!!数组和字符内置对象不能给原型对象覆盖操作Array.prototype=...

  • 扩展对象的功能性.md

    对象扩展 对象类别 在ES6中,对象分为下面几种叫法。 普通对象 特异对象 标准对象 内建对象 对象字面量语法拓展...

  • 原型和原型链

    原型和原型链 原型的特性 所有的引用类型(数组、对象、函数),都对象特性,即可自由扩展属性(除了“null”意外)...

  • ES6 对象的新功能与解构赋值介绍

    ES6 通过字面量语法扩展、新增方法、改进原型等多种方式加强对象的使用,并通过解构简化对象的数据提取过程。 一、字...

  • 对象的功能扩展-《understanding ECMAScipt

    对象分类 ES6将对象分为以下几类: 普通对象 外来对象 标准对象 内建对象 对象字面量的扩展 当key的名与 (...

  • JS原型对象扩展

    曾经想过一个这样的问题:如何扩展原型对象方法,方法可以直接改变自身,而不是返回一个新的值? 这是为什么呢? 其实上...

网友评论

      本文标题:JavaScript-通过原型扩展内建对象

      本文链接:https://www.haomeiwen.com/subject/fmhnfxtx.html