对原型这章的建议

来源:3-8 实际应用 - 总结

李行知

2018-07-25

我感觉老师在犯一个错误。不是关于知识方面的,而是讲解方面的。

因为看高级课程的多少对原型有所了解。但是用的不对,不是看不到jq的源代码,而是不明白为什么这么做。。。等真的自己去做的时候才发现有问题。

自己看这章的时候一直有个问题,为什么呢?为什么jq这么麻烦呢?为什么不直接写prototype呢?

于是我自己写了一下,发现以下代码

let jq = function (selector) {
let slice = Array.prototype.slice
let dom = slice.call(document.querySelectorAll(selector))
let len = dom ? dom.length : 0
for (let i = 0; i < len; i++) {
this[i] = dom[i]
}
this.length = len
this.selector = selector || ''
}
jq.prototype = {
css() {
alert('css')
},
html() {
alert('html')
},
}
window.$ = jq

需要在外面来使用

new才能正确的使用,所以才明白了这个地方为啥会看起来这么复杂。为什么非要有这么多的init呢?很多时候不仅仅想知道的是,怎么做的,而是,为什么这么做

感觉老师这个地方可能把我们想的太厉害了,如果太厉害了其实这个点就没有什么意义了。。。包括这个点我现在还是不明白,为什么还要有一个init

init.prototype=jq.fn

jq.fn.init.prototype=jq.fn的效果不是一样的吗?

那为啥jQuery非要再加一个变量呢?

这里希望老师可以解答一下

写回答

1回答

双越

2018-07-25

jQuery 和 zepto 是同一种使用凡是,但是完全是两种原型的设计方式,至于为何绕来绕去的这么设计,我也没有准确的答案。

不过,这个问题不用过于纠结,能通过这个地方把原型熟悉了即可。

0
1
李行知
非常感谢!好吧
2018-07-25
共1条回复

前端跳槽必备 一线互联网公司高级前端JavaScript面试

视频讲解前端面试中的JS高级知识点,扩展JS知识深度,从容面试

1621 学习 · 218 问题

查看课程