JS高级--原型对象

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

内置对象的原型对象:

  解决兼容性问题:

    如果需要的API,在指定类型的原型对象中不存在,就要在该类型的原型对象中添加所需的共有成员

    其中,在API内部要用this来获取当前正在调用API的点前的对象。

   

原型和原型链:

  原型链:由各级父对象,逐级继承,形成的链式结构

    控制着成员的使用顺序。

  如何判断自有属性:

    var bool = obj.hasOwnProperty("属性名");

  如何判断共有属性:

    首先:

      确定不是自有属性

      问题:不是自有属性:两种情况

        1、可能在原型链上

        2、压根没有

      解决:

        !obj.hasOwnProperty("属性名") && obj.属性名 !=undefined;

  如果强行使用某个子对象,修改共有属性,后果是:仅在当前子对象添加同名自有属性,导致当前子对象无法使用共有属性

  删除属性:

    delete 对象.属性;

亲子鉴定:

  1、用原型对象检查:

    var bool = father.isPrototypeOf(child);

      判断child对象是否继承于father对象

  2、用构造函数检查:

    var bool = child instanceof 构造函数;

      用来判断child是否是构造函数创建出来的子对象

多态:同一个函数,在不同情况下表现出的不同状态。

  重写:如果子对象觉得父对象的成员不好用,就可以在子对象本地重新定义同名成员来覆盖父对象成员。

示例代码如下:

<!DOCTYPE html>

<html lang="en">

<head>

  <meta charset="UTF-8">

  <meta name="viewport" content="width=device-width, initial-scale=1.0">

  <title>Document</title>

</head>

<body>

  <script>

    // var arr1 = new Array();

    // var arr2 = new Array();

    // arr.indexOf(str,fromi);

    var arr = [1,2,3,2,1];

    //         0 1 2 3 4

    // function indexOfs(){}.

    // 如果当前浏览器不支持indexOfs

    if(Array.prototype.indexOfs === undefined){

      // 定义indexOfs函数

      Array.prototype.indexOfs = function(val,formi){

        // 如果fromi是?就从0开始遍历

        formi === undefined && (formi = 0);

        // 从fromi开始遍历数组中每个元素

        for(var i = formi;i<this.length;i++){

          // 如果,当前元素 = val

          if(this[i] === val){

            // 返回当前位置i

            return i

          }

        }   

        // 遍历结束,返回-1

        return -1

      }

    }

       

    // var i = arr.indexOfs(2,2);

    // console.log(i);

    document.write(arr.indexOfs(2));//1

    document.write(arr.indexOfs(2,2));//3

    document.write(arr.indexOfs(2,4));//-1

    document.write(arr.indexOfs(5));//-1

    var str = "\小明\t";

    console.log(str);

     

    if(String.prototype.tirm === undefined){

      String.prototype.tirm = function(){

        return this.replace(/^\s+|\s+$/g,"");

      }

    }

    str = str.tirm();

    console.log(str);

  </script>

</body>

</html>

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值