js 面向对象编程 陷阱2
来源:互联网 发布:程序员简历怎么写 编辑:程序博客网 时间:2024/06/05 02:07
观察如下代码:
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title></head><body><script> function A() { A.prototype.get = function () { return 1 ; } }//步骤一: 先生成一个A的实例,检验其原型函数 var a1 = new A(); console.log(a1.get()); // 1 //步骤二:修改A的原型函数,并验证其已经生效 A.prototype.get = function () { return 2 ; } console.log(a1.get()); // 2 //步骤三:再生成一个A的实例,由于A的构造器中包含原型函数的定义体 //所以,生成实例的同时,步骤二的结果被恢复 var a2 = new A(); console.log(a1.get()); // 1 console.log(a2.get()); // 1</script></body></html>
>>陷阱
如果在A的构造器内部声明原型函数,则每生成A的实例的时候,原型函数都会被重新声明一次。
这是没有意义的动作,或多或少影响js的执行性能。
应将原型函数的定义体从构造器中移出,如下:
<!DOCTYPE html><html><head><meta charset="utf-8" /><title></title></head><body><script> function A(){} A.prototype.get = function () { return 1 ; }//步骤一: 先生成一个A的实例,检验其原型函数 var a1 = new A(); console.log(a1.get()); // 1 //步骤二:修改A的原型函数,并验证其已经生效 A.prototype.get = function () { return 2 ; } console.log(a1.get()); // 2 //步骤三:再生成一个A的实例,由于A的构造器中包含原型函数的定义体 //所以,生成实例的同时,步骤二的结果被恢复 var a2 = new A(); console.log(a1.get()); // 2 console.log(a2.get()); // 2</script></body></html>
阅读全文
0 0
- js 面向对象编程 陷阱2
- js 面向对象编程 陷阱1
- js 面向对象编程
- js 面向对象编程
- js 面向对象编程
- JS面向对象编程
- js面向对象编程
- Js面向对象编程
- JS面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- js面向对象编程
- 关于dcim基于active Mq实现数据中心监控数据的接入
- vscode 常用功能 (20171028)
- Eclipse下Maven新建Web项目index.jsp报错完美解决(war包)
- JavaWeb 国际化
- Thinkphp volist 多重循环原样输出数组key值的使用总结
- js 面向对象编程 陷阱2
- Git之基本命令
- 原来命令行参数处理可以这么写-getopt?
- PAT 1101. Quick Sort (25) 已解决
- 前端开发div常用属性标签大全
- 数组与矩阵---找到无序数组中最小的k个数
- 2017 ACM-ICPC 亚洲区(乌鲁木齐赛区)网络赛 Islands
- wordpress安装主题提示“安装失败:无法创建目录”
- 树和二叉树