84669 人が学習中
152542 人が学習中
20005 人が学習中
5487 人が学習中
7821 人が学習中
359900 人が学習中
3350 人が学習中
180660 人が学習中
48569 人が学習中
18603 人が学習中
40936 人が学習中
1549 人が学習中
1183 人が学習中
32909 人が学習中
最近在学习JS的时候,发现prototype的意义不好理解,而且原型中也包含了众多的方法,从chrome后台调出来看到的原型方法简直多的惊人。由于还没有那么深刻的理解,所以希望大神讲解下原型存在的目的是什么?在什么环境下会用到prototype以及原型链?
闭关修行中......
贴一个阮大神的博客链接,个人感觉算是讲得比较清楚的一篇文章。如果你有其他语言OO编程的基础,你也可以用babel把es6语法下的class,extends转成es5,看看对应的实现,也是有助于理解的。阮一峰:Javascript继承机制的设计思想
其实我觉得原型就是把几个东西共用的方法或者属性给提炼出来,作为原型。写入原型就不用在实例化的时候在重复使用。
比如,对于Person来说,每个Person都有自己的名字,且每个人都希望浏览器能够输出自己的名字的sayName方法。如果将sayName方法写在Person里的话,每次实例化Person的时候都会包含这个方法,多个Person就有多次这个方法。如果写在Prototype里的话,每次实例化的时候不会包含这个方法,但是你使用的时候又可以从prototype中找到这个方法。
sayName
prototype
function Person(name) { this.name = name; this.sayName = function(){ alert(this.name); } }
function Person(name) { this.name = name; } Person.prototype.sayName = function(){ alert(this.name) }
你可以对比一下这两种写法,希望对你有帮助。
据说是为了简单……
是为了节约内存,20年前的内存还是很贵重的,比尔·盖茨曾预言“无论对于谁,640KB RAM都足够了”
目的就是公私分明啊,共有方法、或者公有变量写在原型上,然后各个实例共享,这样你就写一次一坨代码就行了;当然在继承的时候,如果超过三层发生,性能还不如直接new一个新父类。。
因為沒有類的結構,用prototype實現有類語言的繼承特性(創建構造器,指向對象)關於這點可以參考 《javascript the good part》函數一章
建议 阅读下 《JavaScript高级程序设计》 第6章。
贴一个阮大神的博客链接,个人感觉算是讲得比较清楚的一篇文章。如果你有其他语言OO编程的基础,你也可以用babel把es6语法下的class,extends转成es5,看看对应的实现,也是有助于理解的。
阮一峰:Javascript继承机制的设计思想
其实我觉得原型就是把几个东西共用的方法或者属性给提炼出来,作为原型。写入原型就不用在实例化的时候在重复使用。
比如,对于Person来说,每个Person都有自己的名字,且每个人都希望浏览器能够输出自己的名字的
sayName
方法。如果将sayName
方法写在Person里的话,每次实例化Person的时候都会包含这个方法,多个Person就有多次这个方法。如果写在Prototype里的话,每次实例化的时候不会包含这个方法,但是你使用的时候又可以从prototype
中找到这个方法。你可以对比一下这两种写法,希望对你有帮助。
据说是为了简单……
是为了节约内存,20年前的内存还是很贵重的,比尔·盖茨曾预言“无论对于谁,640KB RAM都足够了”
目的就是公私分明啊,共有方法、或者公有变量写在原型上,然后各个实例共享,这样你就写一次一坨代码就行了;当然在继承的时候,如果超过三层发生,性能还不如直接new一个新父类。。
因為沒有類的結構,用prototype實現有類語言的繼承特性(創建構造器,指向對象)
關於這點可以參考 《javascript the good part》函數一章
建议 阅读下 《JavaScript高级程序设计》 第6章。