关于Javascript 的 prototype问题。


Posted in Javascript onJanuary 03, 2007

prototype

1、prototype是与Clone联系起来的,
也就是说,当创建实例时,prototype会把成员clone到该Class(function)的实例上。
Detail: 最常见的几个内置内对象里的prototype,如:Array原型有join, split方法,
当创建数组a时var a=[1,2],原型里的所有方法都被clone到a上。

2、this是该类的实例指针(该指针为"动态联编")。如何理解js this的动态联编,请参考我写的这篇文章:http://blog.never-online.net/article.asp?id=117
当创建该类实例时,实例具有预先定义的所有以this.p类似的成员。也具有prototype原型里定义的成员,如果类内部定义与prototype里的一个定义相同,则不是重写:

看这个例子,jsclass定义的this.func,还有prototype里定义的func,如果jsclass内部有成员与原型里的相同,实例化时优先权为this.func,但注意,原型里并不是重写func,而是jsclass实例共有的,虽然其优先权没有this.func高,与此同时,我们也可以以这种方式来理解prototype与类内部定义成员:

<script>
function jsclass() {
  this.p = "never-online";
  this.func = function () {
    alert('func');
  }
}
jsclass.prototype = {
  func : function () {
  alert(this.p);
  }
}
var a = new jsclass();
a.func();
delete a.func;
a.func();
</script>

我们再把上面的代码修改一下。这样看:

<script>
function jsclass() {
  this.p = "never-online";
  this.func = function () {
    alert('func');
  }
}
jsclass.prototype = {
  func : function () {
  alert(this.p?this.p:'no value');
  }
}
var a = new jsclass();
a.func();//调用内部成员
delete a.func;//此处删除是的类内部定义的func
a.func();//调用prototype成员
delete a.func;//试图再次删除func(prototype)
a.func();//删除无效(内部的func已经被删除),依然可打印输出
</script>

注释:类内部的成员可以用delete删除,而原型里定义的,则不能用delete 实例名.成员名来删除的。
如果用prototype定义后,实例化时:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象
也就是在上面的
delete a.func;//此处删除是的类内部定义的func
a.func();//调用prototype成员
之后,再次调用a.func(),调用时,通过调用prototype.func来实现的。而并非a.func(),这也解释了为什么在jsclass内部定义func与在prototype定义func时不会有重写现象。

Javascript 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
Code: write(s,d) 输出连续字符串
Aug 19 Javascript
关于锚点跳转及jQuery下相关操作与插件
Oct 01 Javascript
不同的jQuery API来处理不同的浏览器事件
Dec 09 Javascript
十个迅速提升JQuery性能让你的JQuery跑得更快
Dec 10 Javascript
使用js获取地址栏中传递的值
Jul 02 Javascript
js 单击式的下拉菜单效果实例
Aug 13 Javascript
jquery利用命名空间移除绑定事件的方法
Mar 11 Javascript
jQuery Validate表单验证入门学习
Dec 18 Javascript
Node.js插件安装图文教程
May 06 Javascript
vue interceptor 使用教程实例详解
Sep 13 Javascript
vue spa应用中的路由缓存问题与解决方案
May 31 Javascript
彻底搞懂JS无缝滚动代码
Jan 03 #Javascript
经典的解除许多网站无法复制文字的绝招
Dec 31 #Javascript
对象的类型:本地对象(1)
Dec 29 #Javascript
JavaScript高级程序设计
Dec 29 #Javascript
JavaScript 参考教程
Dec 29 #Javascript
js自带函数备忘 数组
Dec 29 #Javascript
slice函数的用法 之不错的应用
Dec 29 #Javascript
You might like
PHP7.1方括号数组符号多值复制及指定键值赋值用法分析
2016/09/26 PHP
PHP dirname(__FILE__)原理及用法解析
2020/10/28 PHP
IE8 下的Js错误HTML Parsing Error...
2009/08/14 Javascript
JavaScript 盒模型 尺寸深入理解
2012/12/31 Javascript
JQuery写动态树示例代码
2013/07/31 Javascript
解决JQeury显示内容没有边距内容紧挨着浏览器边线
2013/12/20 Javascript
基于Javascript实现弹出页面效果
2016/01/01 Javascript
探索Vue.js component内容实现
2016/11/03 Javascript
总结几道关于Node.js的面试问题
2017/01/11 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
Vue的路由动态重定向和导航守卫实例
2018/03/17 Javascript
vue this.reload 方法 配置
2018/09/12 Javascript
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
JS函数进阶之继承用法实例分析
2020/01/15 Javascript
详解vue中在循环中使用@mouseenter 和 @mouseleave事件闪烁问题解决方法
2020/04/07 Javascript
多种类型jQuery网页验证码插件代码实例
2021/01/09 jQuery
[44:39]2014 DOTA2国际邀请赛中国区预选赛 NE VS CNB
2014/05/21 DOTA
python实现批量转换文件编码(批转换编码示例)
2014/01/23 Python
python MySQLdb Windows下安装教程及问题解决方法
2015/05/09 Python
Ubuntu下安装PyV8
2016/03/13 Python
django解决跨域请求的问题详解
2019/01/20 Python
python opencv 简单阈值算法的实现
2019/08/04 Python
python实现同一局域网下传输图片
2020/03/20 Python
python 用struct模块解决黏包问题
2020/11/07 Python
师范生实习的个人自我鉴定
2013/10/20 职场文书
毕业自我鉴定
2013/11/05 职场文书
财务分析个人的自荐书范文
2013/11/24 职场文书
北体毕业生求职信
2014/02/28 职场文书
职务说明书范文
2014/05/07 职场文书
加强作风建设工作总结
2014/10/23 职场文书
技术股东合作协议书
2014/12/02 职场文书
介绍长城的导游词
2015/01/30 职场文书
舞出我人生观后感
2015/06/16 职场文书
二胎满月酒致辞
2015/07/29 职场文书
导游词之日本富士山
2020/01/06 职场文书
24年收藏2000多部退役军用电台
2022/02/18 无线电