zoukankan      html  css  js  c++  java
  • JS原型链继承--转载

    Personal 对象想要继承 Main 对象,则通过将 Main 的实例赋值给 Personal 的原型对象 :

    Personal.prototype = new Main () ;

    如此 Personal原型对象 就能通过 Main 对象的实例中的 [[Prototype]] 来访问到 Main原型对象 中的属性和方法了,而此时大家注意,Personal原型对象 则与 Personal函数 断开了联系,因为Personal原型对象被重新赋值了,所以还需要重新将Personal函数和Personal原型对象建立联系:

    Personal.prototype.constructor = Personal ;

    代码如下:

    function Main () {
    }
    Main.prototype.sex = '男' ;
    Main.prototype.eat = function () {
        console.log('Main eat ...')
    }
    
    
    function Personal () {}
    Personal.prototype.name = 'hwk';
    Personal.prototype.sayName = function () {
        console.log('Personal name')
    }
    
    // 继承
    Personal.prototype = new Main();
    Personal.prototype.constructor = Personal;
    
    var p = new Personal();
    console.log(p.sex ) ; //
    console.log(p.name) ; // undefined
    p.eat();              // Main eat ...
    p.sayName ();          // Uncaught TypeError:p.sayName is not a function 

    运行如上代码你会发现 p.name 为 undefined , p.sayName 这个方法没找到,原因在于我们后面重新赋值了 Personal.prototype = new Main(); 因此找不到一开始定义在 Personal.prototype 上的name属性和sayName方法,因此在使用原型链继承的时候,要在继承之后再去在原型对象上定义自己所需的属性和方法:

    // 先继承
    Personal.prototype = new Main();
    Personal.prototype.constructor = Personal;
    
    // 后定义属性和方法
    Personal.prototype.name = 'hwk';
    Personal.prototype.sayName = function () {
        console.log('Personal name')
    }
    
    // 正确输出
    console.log(p.sex ) ; //
    console.log(p.name) ; // hwk
    p.eat();              // Main eat ...
    p.sayName ();          // Personal name

    此时 Personal的实例 已经可以访问到父类Main原型对象中的方法和属性了,这也就是原型链继承的方式,希望对大家有帮助!

    PS:在原型对象上定义属性和方法,其所有的构造函数实例都能共享原型上的属性和方法,因此如果某一个构造函数实例对象修改了原型对象上的属性值和方法,则也会影响其他实例对象。
    ————————————————
    版权声明:本文为CSDN博主「K-Code」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
    原文链接:https://blog.csdn.net/u010298576/java/article/details/86169015

    https://blog.csdn.net/zhuanyemanong/java/article/details/80325387
  • 相关阅读:
    JSP项目中使用ueditor(百度编辑器)
    web安全—tomcat禁用WebDAV或者禁止不需要的 HTTP 方法
    网站开发常用jQuery插件总结(六)关键词说明插件cluetip
    网站开发常用jQuery插件总结(五)滚动条插件nanoscroller
    网站开发常用jQuery插件总结(四)验证插件validation
    网站开发常用jQuery插件总结(三)拖拽插件gridster
    网站开发常用jQuery插件总结(二)弹出层插件Lightbox_me
    网站开发常用jQuery插件总结(一)提示插件alertify
    wordpress整站搬家总结
    C#中指针使用总结
  • 原文地址:https://www.cnblogs.com/yizhilin/p/12893114.html
Copyright © 2011-2022 走看看