84669인 학습
152542인 학습
20005인 학습
5487인 학습
7821인 학습
359900인 학습
3350인 학습
180660인 학습
48569인 학습
18603인 학습
40936인 학습
1549인 학습
1183인 학습
32909인 학습
javascript中的uber怎么用求解释
认证0级讲师
uber只是一个对象属性而已,没有什么特殊的。然后虽然看着哟亣多,但其实这就是一个递归而已。我们先把toString的代码抄一下:
uber
toString
Shape.prototype.toString = function() { var result = []; if( this.constructor.uber ) { result[ result.length ] = this.constructor.uber.toString(); } result[ result.length ] = this.name; return result.join(', '); }
第一次my.toString,此时
my.toString
this.constructor.uber.toString = Triangle.uber.toString = TwoDShape.prototype.toString
这时候调用的就是TwoDShape.toString了,同样再走一遍流程,此时
TwoDShape.toString
this.constructor.uber.toString = TwoDShape.uber.toString = Shape.prototype.toString
这时候调用的就是Shape.toString了,因为Shape.uber不存在,所以if就直接跳过了,执行后面的result[ reult.length ] = this.name并返回结果,也就是shape。
Shape.toString
Shape.uber
if
result[ reult.length ] = this.name
shape
跳回TwoDShape.toString,此时条件语句就定义了result[0] = 'shape',然后后面就定义了result[1] = '2D shape',所以TwoShape.toString返回的就是shape, 2D shape。
result[0] = 'shape'
result[1] = '2D shape'
TwoShape.toString
shape, 2D shape
跳回Triangle.toString,根据上一条我们知道条件语句返回的就是result[0] = 'shape, 2D shape',然后后面定义了result[1] = 'Triangle',所以my.toString返回的就是shape, 2D shape, Triangle。
Triangle.toString
result[0] = 'shape, 2D shape'
result[1] = 'Triangle'
shape, 2D shape, Triangle
uber
只是一个对象属性而已,没有什么特殊的。然后虽然看着哟亣多,但其实这就是一个递归而已。我们先把toString
的代码抄一下:第一次
my.toString
,此时这时候调用的就是
TwoDShape.toString
了,同样再走一遍流程,此时这时候调用的就是
Shape.toString
了,因为Shape.uber
不存在,所以if
就直接跳过了,执行后面的result[ reult.length ] = this.name
并返回结果,也就是shape
。跳回
TwoDShape.toString
,此时条件语句就定义了result[0] = 'shape'
,然后后面就定义了result[1] = '2D shape'
,所以TwoShape.toString
返回的就是shape, 2D shape
。跳回
Triangle.toString
,根据上一条我们知道条件语句返回的就是result[0] = 'shape, 2D shape'
,然后后面定义了result[1] = 'Triangle'
,所以my.toString
返回的就是shape, 2D shape, Triangle
。