【JavaScript】prototype简单解释
2016-07-06 20:41
393 查看
prototype(原型)是javascript面向对象(Object Oriented,OO)思想的重要属性,也是初学时扰乱我很久的一个属性,到底prototype在js中有什么用呢?为什么说他是面向对象中重要的一环呢?
我的总结是:
1、加了prototype的方法,就是需要实例化之后才可以调用的方法(相当于java中的非静态方法,如get/set方法),从底层来讲,系统在该方法的类函数被实例化后才给其分配内存。
2、不加prototype的方法,即不需要实例化就可以调用。从底层来讲,宿主运行环境在js加载完成后就给该方法分配了内存。
3、总的来说,不加prototype效率更高,系统不需要自动回收内存;而加了prototype更加节约内存。
下面来看一个例子:
很明显,c方法直接被分配了内存,可直接通过main.c()调用(调用完后,c就会被回收,不会被其他对象所继承),相当于类main中的a方法;而d方法不能直接调用,只有在实例化了之后才可以调用:new main().d(),相当于main中的b方法(区别就是prototype不能再new对象的时候复制属性,节约了内存,也更加灵活)。
一些粗浅的个人理解,望更正。
我的总结是:
1、加了prototype的方法,就是需要实例化之后才可以调用的方法(相当于java中的非静态方法,如get/set方法),从底层来讲,系统在该方法的类函数被实例化后才给其分配内存。
2、不加prototype的方法,即不需要实例化就可以调用。从底层来讲,宿主运行环境在js加载完成后就给该方法分配了内存。
3、总的来说,不加prototype效率更高,系统不需要自动回收内存;而加了prototype更加节约内存。
下面来看一个例子:
function main() { var a = function () { alert("c") }; this.b = function () { alert("b") } } main.c=function () { alert("c") } main.prototype.d=function () { alert("d") } main.c();//输出c //main.d();//报错,d is not a function var m = new main(); //m.c(); //报错,c is not a function m.d();//输出d
很明显,c方法直接被分配了内存,可直接通过main.c()调用(调用完后,c就会被回收,不会被其他对象所继承),相当于类main中的a方法;而d方法不能直接调用,只有在实例化了之后才可以调用:new main().d(),相当于main中的b方法(区别就是prototype不能再new对象的时候复制属性,节约了内存,也更加灵活)。
一些粗浅的个人理解,望更正。
相关文章推荐
- JQuery1——基础($对象,选择器,对象转换)
- Android学习笔记(二九):嵌入浏览器
- Android java 与 javascript互访(相互调用)的方法例子
- JavaScript演示排序算法
- javascript实现10进制转为N进制数
- 最后一次说说闭包
- Ajax
- 2019年开发人员应该学习的8个JavaScript框架
- HTML中的script标签研究
- 对一个分号引发的错误研究
- 异步流程控制:7 行代码学会 co 模块
- ES6 走马观花(ECMAScript2015 新特性)
- JavaScript拆分字符串时产生空字符的原因
- Canvas 在高清屏下绘制图片变模糊的解决方法
- Redux系列02:一个炒鸡简单的react+redux例子
- JavaScript 各种遍历方式详解
- call/apply/bind 的理解与实例分享