@ALL 大家注意,老师在2:20的时候执行了一下代码:
arr.__proto__={
addClass:function(){console.log("this is a addClass")},
concat:Array.prototype.concat,
push:Array.prototype.push,
}
此时的arr已经失去的之前原型中的全部引用,所以老师才会在后面操作下面的步骤:
arr.__proto__.constructor.prototype.customFn={a:10},
只有这样原型中才会有customFn方法。
arr.__proto__={
addClass:function(){console.log("this is a addClass")},
concat:Array.prototype.concat,
push:Array.prototype.push,
}
此时的arr已经失去的之前原型中的全部引用,所以老师才会在后面操作下面的步骤:
arr.__proto__.constructor.prototype.customFn={a:10},
只有这样原型中才会有customFn方法。
2017-10-23
(window.$ === undefined) && (window.$ =Zepto) 这个和与运算的实现有关, 如果&&前面这个表达式返回false, 则与运算返回false, 就不执行第二个表达式。 所以window.$ === undefined返回true时才执行第二个表达式
已采纳回答 / empty_back
上面不是写了arr.__proto__===Array.prototype。arr.__proto__.xxx这样写如果Array.prototype中有xxx方法就会重写xxx方法如果没有就会添加一个xxx方法,要是想不影响其它Array对象可以arr.a=xxx这样写
2017-09-05
貌似老师的中文翻译源码有个地方错了,在 112 行左右的 type 函数应该是这样的 :
function type(obj) {
return obj == null ? String(obj) :
class2type[toString.call(obj)] || "object"
}
少了 class2type
function type(obj) {
return obj == null ? String(obj) :
class2type[toString.call(obj)] || "object"
}
少了 class2type
2017-09-02