javascript prototype原型操作笔记


Posted in Javascript onDecember 07, 2009
//var People={name:"xiong",age:15}; 
//var Person=function(user,age){ 
//    this.name=user; 
//    this.age=age; 
//    this.say=function(){alert("I am "+this.name+"\n"+this.age);} 
//} 
//var Chairman=function(name,salary){ 
//    Person.call(this,name); 
//    } 
//var Bill=new Person("Bill",15); 
//var Hu=new Chairman("Hu Jintao"); 
//Person.prototype.eat=function(){ 
//    alert("I'm eating"); 
//    } 
//Bill.eat(); 
function Person(name) //基类构造函数 
{ 
this.name = name; 
}; Person.prototype.SayHello = function() //给基类构造函数的 prototype 添加方法 
{ 
alert("Hello, I'm " + this.name); 
}; 
function Employee(name, salary) //子类构造函数 
{ 
Person.call(this, name); //调用基类构造函数 
this.salary = salary; 
}; 
    function Xiong(name,age){ 
        Employee.call(this,name); 
        } 
Employee.prototype = new Person(); //建一个基类的对象作为子类原型的原型,这里很有意思 
    Xiong.prototype=new Employee(); 
Employee.prototype.ShowMeTheMoney = function() //给子类添构造函数的 prototype 添加方法 
{ 
alert(this.name + " $" + this.salary); 
}; 
var BillGates = new Person("Bill Gates"); //创建基类 Person 的 BillGates 对象 
var SteveJobs = new Employee("Steve Jobs", 1234); //创建子类 Employee 的 SteveJobs对象 
     var hiakuotiankong=new Xiong("海阔天空"); 
     var benbenxiong=new Xiong("笨笨熊"); 
// BillGates.SayHello(); //通过对象直接调用到 prototype 的方法 
// hiakuotiankong.SayHello(); //通过子类对象直接调用基类 prototype 的方法,关注! 
     benbenxiong.SayHello=function(){ //掩盖了原型的 SayHello 方法 
         alert("haha,I'm"+this.name); 
} 
         benbenxiong.SayHello(); 
// SteveJobs.ShowMeTheMoney(); //通过子类对象直接调用子类 prototype 的方法 
// alert(BillGates.SayHello == SteveJobs.SayHello); //显示:true,表明 prototype 的方法是共享的 
    Xiong.prototype.Goodbye=function(){ 
         alert(this.name+"Bye-bye"); 
        } 
    benbenxiong.Goodbye();    

在 JavaScript 中,prototype 不但能让对象共享自己财富,而且 prototype 还有寻根问祖的
天性,从而使得先辈们的遗产可以代代相传。当从一个对象那里读取属性或调用方法时,如果该对象自
身不存在这样的属性或方法,就会去自己关联的 prototype 对象那里寻找;如果 prototype 没有,又会
去 prototype 自己关联的前辈 prototype 那里寻找,直到找到或追溯过程结束为止。

在 JavaScript 内部,对象的属性和方法追溯机制是通过所谓的 prototype 链来实现的。当用 new
操作符构造对象时,也会同时将构造函数的 prototype 对象指派给新创建的对象,成为该对象内置的原
型对象。对象内置的原型对象应该是对外不可见的,尽管有些浏览器(如 Firefox)可以让我们访问这个
内置原型对象,但并不建议这样做。内置的原型对象本身也是对象,也有自己关联的原型对象,这样就
形成了所谓的原型链。

在原型链的最末端,就是 Object 构造函数 prototype 属性指向的那一个原型对象。这个原型对象
是所有对象的最老祖先,这个老祖宗实现了诸如 toString 等所有对象天生就该具有的方法。其他内置
构造函数,如 Function, Boolean, String, Date 和 RegExp 等的 prototype 都是从这个老祖宗传承下
来的,但他们各自又定义了自身的属性和方法,从而他们的子孙就表现出各自宗族的那些特征。

Javascript 相关文章推荐
在服务端(Page.Write)调用自定义的JS方法详解
Aug 09 Javascript
JavaScript 判断用户输入的邮箱及手机格式是否正确
Dec 08 Javascript
jquery中each方法示例和常用选择器
Jul 08 Javascript
javascript实现iframe框架延时加载的方法
Oct 30 Javascript
jQuery Easyui Treegrid实现显示checkbox功能
Aug 08 jQuery
Vue2.0+ElementUI实现表格翻页的实例
Oct 23 Javascript
JS实现520 表白简单代码
May 21 Javascript
浅谈Webpack下多环境配置的思路
Jun 27 Javascript
vue权限问题的完美解决方案
May 08 Javascript
JS实现可视化音频效果的实例代码
Jan 16 Javascript
vue使用echarts图表自适应的几种解决方案
Dec 04 Vue.js
一文了解JavaScript用Element Traversal新属性遍历子元素
Nov 27 Javascript
javascript Array.sort() 跨浏览器下需要考虑的问题
Dec 07 #Javascript
IE7中javascript操作CheckBox的checked=true不打勾的解决方法
Dec 07 #Javascript
js event事件的传递与冒泡处理
Dec 06 #Javascript
IE和firefox浏览器的event事件兼容性汇总
Dec 06 #Javascript
js 操作select相关方法函数
Dec 06 #Javascript
JavaScript 对象模型 执行模型
Dec 06 #Javascript
ASP Json Parser修正版
Dec 06 #Javascript
You might like
PHP 5.0对象模型深度探索之属性和方法
2008/03/27 PHP
PHP缓存技术的使用说明
2011/08/06 PHP
thinkphp autoload 命名空间自定义 namespace
2015/07/17 PHP
PHP+AJAX 投票器功能
2017/11/11 PHP
jquery 表单下所有元素的隐藏
2009/07/25 Javascript
JavaScript 通过模式匹配实现重载
2010/08/12 Javascript
用Jquery.load载入页面后样式没了页面混乱的解决方法
2014/10/20 Javascript
Bootstrap carousel轮转图的使用实例详解
2016/05/17 Javascript
AngularJs Dependency Injection(DI,依赖注入)
2016/09/02 Javascript
Bootstrap CSS布局之列表
2016/12/15 Javascript
node.js入门学习之url模块
2017/02/25 Javascript
js运算符的一些特殊用法
2018/07/29 Javascript
Javascript迭代、递推、穷举、递归常用算法实例讲解
2019/02/01 Javascript
9102了,你还不会移动端真机调试吗
2019/03/25 Javascript
JS 逻辑判断不要只知道用 if-else 和 switch条件判断(小技巧)
2020/05/27 Javascript
c++生成dll使用python调用dll的方法
2014/01/20 Python
python脚本实现统计日志文件中的ip访问次数代码分享
2014/08/06 Python
在ironpython中利用装饰器执行SQL操作的例子
2015/05/02 Python
简单谈谈python中的语句和语法
2017/08/10 Python
python+selenium识别验证码并登录的示例代码
2017/12/21 Python
mac下如何将python2.7改为python3
2018/07/13 Python
Python模拟简单电梯调度算法示例
2018/08/20 Python
Python 加密与解密小结
2018/12/06 Python
Python中按值来获取指定的键
2019/03/04 Python
Pyqt清空某一个QTreeewidgetItem下的所有分支方法
2019/06/17 Python
python3.6根据m3u8下载mp4视频
2019/06/17 Python
python用pip install时安装失败的一系列问题及解决方法
2020/02/24 Python
canvas实现二维码和图片合成的示例代码
2018/08/01 HTML / CSS
乌克兰第一的珠宝网上商店:Gold.ua
2019/11/29 全球购物
关于圣诞节的广播稿
2014/01/26 职场文书
个人剖析材料范文
2014/09/30 职场文书
解除劳动合同通知书范本
2015/04/16 职场文书
Html5调用企业微信的实现
2021/04/16 HTML / CSS
Java基础之线程锁相关知识总结
2021/06/30 Java/Android
基于PyQT5制作一个桌面摸鱼工具
2022/02/15 Python
Redis分布式锁的7种实现
2022/04/01 Redis