美文网首页
面向对象 继承方式 函数原型关系

面向对象 继承方式 函数原型关系

作者: 不正经开发者 | 来源:发表于2018-01-27 19:27 被阅读0次

    1、面向对象三大特征:封装、继承、多态

        封装:将功能封装整合在对象内,只对外界暴露指定接口,外界使用只需考虑接口的使用。

        继承:JS中的继承是对象和对象之间的继承,如果一个对象想拥有另外一个对象的成员,就可以让这个对象继承自另外一个对象。

        多态:JS没有多态。


    2、继承的实现方式

        ①混入式继承 

        for in { 对象[key]=继承对象[key] }

        ②替换原型方式实现继承

        构造函数.prototype=继承对象

        好处:能直接所有添加使用

        弊端:会把之前原型内的对象替换掉为要继承的对象

        ③混合式继承

        for in { 对象.prototype[key]=继承对象[key] }:没有替换原型,只是往原型中添加成员


    3、原型链

        每个对象都有原型,原型也是一个对象,所以原型又有原型,形成一个链式结构,即原型链。

        对象访问属性和方法的规则:如果自己里面有这个成员,就访问自己的;如果自己没有,就去原型中查找;如果原型中没有找到,就沿着原型链接上往上查找,直到找到为止;如果到头都没找到,就返回undefined或报错。

        不管是哪个对象,最终的原型链尽头都是 Object.prototype

        意味着Object.prototype这个原型里面的成员,不管是哪个对象都可以访问


    4、Object.prototype的成员介绍

        hasOwnProperty:判断自己本身是否有这个属性

        对象.hasOwnProperty(属性)

        属性 in 对象:判断自己能不能访问某个属性

        isPrototypeOf:判断一个对象是不是另一个对象的原型

        对象1.isPrototypeOf(对象2)

        propertyIsEnmuerable:判断属性是否是属于自己的

                              判断属性是否是可以遍历的

                              只有两个都成立,结果才为true

        对象.propertyIsEnmuerable(属性)

        valueOf:原始值

        *不推荐直接给内置构造函数的原型扩展方法或者属性。


    6、函数是一个对象  (构造函数也是一样)

        查看函数对象:console.dir()

        这个函数是由哪个构造函数创建出来的?Function


    7、函数对象中常用的属性

        函数名.caller:一个函数在哪个函数体里面被调用,那么这个函数的caller就是那个函数。(如果这个函数是直接调用,那么这个函数的caller就是null)

        函数名.length:代表的是形参的个数

        函数名.name:代表的是函数名

        函数名.arguments:代表的是实参  (函数名.arguments 这个不常用)

      (函数名.arguments === arguments)//false

        arguments:伪数组,但也是一个对象(arguments.push()没有这个方法)    

        对象里的属性:arguments.callee  函数本身


    8、instanceof:判断构造函数的prototype属性在不在某个对象它的原型链上

        语法:对象 instanceof 构造函数

    相关文章

      网友评论

          本文标题:面向对象 继承方式 函数原型关系

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