判断window全局是否有定义变量$,没有的话把Zepto赋值给$
直接 `arr.test` 是给arr这个数组(本质还是对象)新增了一个新属性,值为一个函数。
而 `arr.__proto__.test` 则是加在arr的原型上的。
类比面向对象的变成思想。假设一直狗会叫,那么这个方法是针对每一只具体的狗逐个去赋予它这个方法呢?还是直接在狗的这个抽象类对象上?
不过在实例代码中用prototype的更多一些吧,不过和 `__proto__` 也是有区别的,简单可以说prototype是从Array上访问,而在具体以的某个 `[]` 上是不行。不过 `Array.prototype === [].__proto__` ,因此可通过[].__proto__访问修改Array.prototype。 具体区别需要深入JavaScript的原型链机制了。
右下角
If `$` is not yet defined, point it to `Zepto`
上面不是写了arr.__proto__===Array.prototype。arr.__proto__.xxx这样写如果Array.prototype中有xxx方法就会重写xxx方法如果没有就会添加一个xxx方法,要是想不影响其它Array对象可以arr.a=xxx这样写
这个可以到对应的官网查看文档,比较全面
因为window下直接挂载的undefined可能会被用户或其他库的代码覆盖:
window.undefined = "我被覆盖了";
所以zepto作者在局部变量里定义了一个未初始化的undefined,因为未初始化,所以undefined变量值肯定为undefined,综上就是为了避免全局undefined变量被覆盖导致判断不准的问题。
就是添加在原型上的方法啊
String.prototype.demaxiya = function(){ console.log('人在塔在'); }
然后你用字符串就可以调用这个方法了
双等判断 值相等就 成立。三等判断 不仅值相等,还要类型相等。a 和 b 值相等,a 是number类型,b 是 string 类型
让用户可以访问zepto中的方法,比如:
var $body = $('body') $.zepto.isZ($body) // true
闭包:函数及其变量的作用域构成了闭包
变量作用域:变量生存空间
hoisting:前置执行(尽管写在后面)
是的 new对象通常是推荐字面量表达式
var a = {} ;
var b = [];
我们一般也是这么申明
找个CDN, 地址拿出来 放浏览器地址栏, 源码不就有了
如果没有 { 或者 } 这样的标识, js默认一行结束自动添加分号
返回的是false
这里~
http://www.kancloud.cn/wangfupeng/zepto-design-srouce/173681