十二 原型链

2018-09-18  本文已影响0人  WIN_Inn

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的东西

上一篇下一篇

猜你喜欢

热点阅读