美文网首页
十二 原型链

十二 原型链

作者: WIN_Inn | 来源:发表于2018-09-18 21:25 被阅读0次

    Grand.prototype.lastName = "Deng";

    function Grand ( ) { }

    var grand = new Grand ( );

    Father.prototype = grand;

    function Father ( ) {  this.name = "xuming"; }

    var father = new Father ( ) ;

    Son.prototype = father;

    function Son ( ) {  this.hobbit = "smoke"; }

    var son = new Son ( ) ;

    //   son.lastName = "Deng"

    在原型上再加一个原型,按照链的形式访问属性或者方法的形式,叫做原型链,链接点为 __proto__;

    son上面没有toString方法,访问的是Object的toString;

    以此原型链为例 Grand.prototype.__proto__ = Object.prototype; Object是终极boss,它的下面不再有__proto__指向。

    增删改查:子孙不能修改祖先的东西。但是有特例。

    特例:son.父级的属性或方法.属性。此时son是不改的,但是父级或者说祖先会有改变

                 这是引用值自己的修改,只适用于引用值,原始值不可以。


    var obj = { }    等价于      var obj = new Object ( ) ;

    obj.__proto__ --->  Object.prototype


    Object.create(原型)

    // var obj = Object.create ( 原型 );   括号里只能填原型(对象)或者null,不能为空

    Person.prototype.name = "sunny";

    function Person ( ) { }

    var person = Object.create ( Person.prototype );


    绝大多数对象最终都会继承自Object.prototype

    特例!!!!

     Object.create ( null );     这样创建出来的原型下面没有__proto__,即使手动加了也没有继承特性


    null 和 undefined 是原始值,既不是对象,也没有原型,所以它们没有toString ( ) 方法,undefined是原始值

    avaScript中的数据类型分为两类,原始类型(primitive type)和对象类型(object type)。JavaScript中的原始类型包括:数字,布尔值,字符串,以及null和undefined。


    原型上方法的重写

    Object.prototype.toString 与 Number.prototype.toString 是方法重写的关系

    Object.prototype.toString.call( 123 );   // "[object Number]"

    Object.prototype.toString.call( true );   // "[object Boolean]"

    var obj = Object.create ( null );

    document.write ( obj ) ;   //此处其实是打印的obj.toString ( )

    如果给obj增加一个toString方法, obj.toStirng = function ( ) { return "其实是打印toString啦"; }

    document.write( obj );  就会打印出 toString方法中return的东西

    相关文章

      网友评论

          本文标题:十二 原型链

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