JS笔记14(对象的继承和多态)

本文详细介绍了JavaScript中的对象继承机制,包括原型、原型链、自有属性与共有属性的判断、删除与修改,以及如何为对象添加共有方法。同时,讲解了多态的概念,通过示例展示了如何判断对象类型及实现自定义继承。此外,还探讨了如何覆盖父对象的成员以实现不同的效果。
摘要由CSDN通过智能技术生成

一、对象继承

        继承:夫对象的属性和方法,子对象可以直接使用;可以代码重用,节约内存空间,提升性能。

        对象中,父对象称为原型:原型保存着这一类的对象共有的属性和共有方法;找原型方法:

        对象名.__proto__;//通过对象名来找它的原型,但是这样只是找到它上一层的原型,并不是最终的原型;

        构造函数名.prototype;//对象的构造函数名,除了Math,其他都有构造函数方法:例如:

Array.prototype;找到的就是数组的原型。

上面两种方法找到的都不是最顶层的原型,最顶层的原型是Object.prototype;其他对象想要找到最顶层的原型需要通过.__proto__一层一层来往上找,这就是原型链;JS中万物的顶层原型都是对象,除了null和undefined;

        如何判断对象的属性是自有,还是共有:

        var obj={
            "name":"dada",
            "dizhi":"ada"
        }
        obj.__proto__.fff=function(){
            console.log(1)
        }
        obj.__proto__.qqq="sfasf";
        //放入方法名或者属性名
        if(obj.hasOwnProperty("qqq")){
            console.log("自有")
        }else{
            if(obj.hasOwnProperty("qqq")==false&&"qqq" in obj){
                console.log("共有")
            }else{
                console.log("没有")

            }
        }

        删除修改自有和共有:

        删除自有属性:delete obj.属性名;

        修改自有属性:obj.属性名=新值;

        修改共有属性不能在本地直接修改:obj.__proto__.属性名=新值;

        删除共有:delete obj.__proto__.属性名;

        为一类对象添加共有方法:

        构造函数名.prototype.方法名=function(){方法的操作}

        如何判断对象是什么类型:

        var arr=[1,2,3,4,10]
        var de=new Date;
        var arr2=[]
        var obj={}
        var str="1,2,3,4,10"
        console.log(Array.prototype.isPrototypeOf(arr))//true
        console.log(Date.prototype.isPrototypeOf(de))
        console.log(String.prototype.isPrototypeOf(str))//false
        console.log(Object.prototype.isPrototypeOf(obj))
        console.log("------------------------------------------------")
        console.log(arr instanceof Array)//true
        console.log(de instanceof Date)//true
        console.log(obj instanceof Object)//true
        console.log(str instanceof String)//false
        console.log("------------------------------------------------")
        console.log(Array.isArray(arr))//true,数组能用
        // console.log(Date.isDate(de))
        // console.log(String.isString(str))
        // console.log(Object.isObject(obj))
        console.log("------------------------------------------------")
        console.log(Object.prototype.toString.apply(arr))//输出的是object Array
        console.log(Object.prototype.toString.apply(de))//输出的是object Date
        console.log(Object.prototype.toString.apply(str))//输出的是object String
        console.log(Object.prototype.toString.apply(obj))//输出的是object Object

        实现自定义继承:

        1、两个对象之间设置继承:子对象.__proto__=想设置成子对象原型的对象名

        2、多个对象设置继承:需要用自定义构造函数方法创建对象,构造函数名.prototype=想设置成子对象原型的对象名

二、多态

        同一个函数名拥有多种形态或不同效果;子对象觉得父对象的成员不好用,可以本地定义同名成员,覆盖了父对象的成员,比如toString不同的人使用效果不同,其实根本不是同一个toString

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值