function Route(method, path, callbacks, options) {
options = options || {};//左边的options和右边的options不一样的吧?
this.path = path;
this.method = method;
this.callbacks = callbacks;
this.regexp = utils.pathRegexp(path
, this.keys = []
, options.sensitive
, options.strict);
}
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
先反对上面 theWalker答案里面 全局创建变量。
//左边的options和右边的options不一样的吧?
先解释这句话, 是一样的,都是这个func里面局部变量。
这里作用前面说到了,就是初始化变量,为什么这么做,为了减少下面的判断,后者说是为了保证一些基本逻辑能执行。
例如这里如果不写 options = options || {}
那么当你执行 Route(1,2,3)的时候
就会报错
报错的地方在 options.sensitive options.strict
Cannot read property 'sensitive' of undefined
你可以试试。
这是一种初始化变量的方式了。
比如:
如果你是
test(2),那就没啥。但如果你是
test(),num就没内容了吧,这时候就会变成num=1;这里有个 短路逻辑 的知识点。题主应该知道的吧0.0
一样的。赋值操作,用于设置默认值,有值直接取
options,没值取{}。一样的,同一个变量,只不过如果会进来的 options 可以判为 false 的时候会把
{}赋给options,也就是对变量重新赋值我最初学习js也是很多疑点,毕竟c/c++在这里是只会返回true或者false,但是,js这里是如果第一个为真,||就返回第一个元素,如果第一个不为真,就返回第二个元素,注意,是整个元素,不是true或false,不管第二个逻辑上为真或假,如果有更多元素,则同理,因为不管它是什么,结果都跟它一致,比如说0||1||{},第一个为0,所以看第二个,第二个为1,好了,返回1,因为||是有真则真,全假则假,现在有一个为真,后面不管是什么,结果都为真了,同理0||{}||1则返回的是{},它是一个js的Object的实例,同理&&会遇到假就返回,不管后面是什么,比如0||{}返回0,有点啰嗦,但是希望你懂,这就是短路逻辑,这个方式经常用来初始化变量,就像你上面的写法,还有一种用法是可以替代if或者三元表达式,比如if(expression){x=1;}可以写成expression && (x=1);灵活运用,但是个人觉得为了好维护,最好还是用if
这就是个JS的类的构造函数.