jquery ui widget 疑问

begoodluck 发布于 2014/05/05 16:33
阅读 197
收藏 0

jquery ui 1.10.3版本

jquery.ui.widget.js中第48~59行中

 constructor = $[ namespace ][ name ] = function( options, element ) {
  // allow instantiation without "new" keyword
  if ( !this._createWidget ) {
   return new constructor( options, element );
  }

  // allow instantiation without initializing for simple inheritance
  // must use "new" keyword (the code above always passes args)
  if ( arguments.length ) {
   this._createWidget( options, element );
  }
 };

请问大侠们,什么时候走红色部分,如果走红色位置时,不是死循环吗?请大侠们多指教!

加载中
0
con
con


看代码的意思,红色的部分是为了对应调用构造函数的时候忘了使用new关键字的情况,这个构造函数的prototype对象里面应该有一个_createWidget属性,如果

1、调用构造函数的时候使用了new关键字(new constructor()),会生成一个新的对象,函数中的this指向这个对象,新对象继承prototype中的属性,因此this._createWidget是有值的;

2、调用构造函数的时候没有使用new关键字(constructor()),则不会生成新的对象,因此this会指向当前环境的上下文(一般是window对象),this._createWidget是undefined,这时执行return new constructor( options, element ); ,重新使用new关键字调用一次 constructor(),(同1),这次执行时this指向了新对象,也有了_createWidget属性,执行后面的代码。


b
begoodluck
嗯,谢谢!之前我一直以为与$.widget = function( name, base, prototype ) {} 中的base对象有关,所以一直不理解为什么要这么做。没对this的指向上下文进行思考。
返回顶部
顶部