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 相关文章推荐
jquery 子窗口操作父窗口的代码
Sep 21 Javascript
Jquery实现自定义窗口随意的拖拽
Mar 12 Javascript
JavaScript表格常用操作方法汇总
Apr 15 Javascript
javascript实现tab切换的四种方法
Nov 05 Javascript
所见即所得的富文本编辑器bootstrap-wysiwyg使用方法详解
May 27 Javascript
JavaScript Ajax编程 应用篇
Jul 02 Javascript
jQuery中值得注意的trigger方法浅析
Dec 12 Javascript
基于vue.js快速搭建图书管理平台
Oct 29 Javascript
详解webpack-dev-server 设置反向代理解决跨域问题
Apr 18 Javascript
vue使用ElementUI时导航栏默认展开功能的实现
Jul 04 Javascript
微信小程序绘制图片发送朋友圈
Jul 25 Javascript
js节流防抖应用场景,以及在vue中节流防抖的具体实现操作
Sep 21 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
overlord人气高涨,却被菲利普频繁举报,第四季很难在国内上映
2020/05/06 日漫
php使用fputcsv()函数csv文件读写数据的方法
2015/01/06 PHP
PHP中快速生成随机密码的几种方式
2017/04/17 PHP
微信公众平台开发教程⑤ 微信扫码支付模式介绍
2019/04/10 PHP
Laravel 登录后清空COOKIE的操作方法
2019/10/14 PHP
文本链接逐个出现的js脚本
2007/12/12 Javascript
js程序中美元符号$是什么
2008/06/05 Javascript
jQuery 1.2.x 升? 1.3.x 注意事项
2009/05/06 Javascript
js弹出的对话窗口永远保持居中显示
2012/12/15 Javascript
JS使用cookie实现DIV提示框只显示一次的方法
2015/11/05 Javascript
轻松使用jQuery双向select控件Bootstrap Dual Listbox
2015/12/13 Javascript
jquery输入数字随机抽奖特效的简单实现代码
2016/06/10 Javascript
老生常谈JQuery data方法的使用
2016/09/09 Javascript
jQuery无刷新上传之uploadify简单代码
2017/01/17 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
详解js的视频和音频采集
2018/08/09 Javascript
详解js创建对象的几种方法及继承
2019/04/12 Javascript
JS异步宏队列与微队列原理区别详解
2020/07/02 Javascript
Python实现按学生年龄排序的实际问题详解
2017/08/29 Python
Python实现PS图像调整颜色梯度效果示例
2018/01/25 Python
使用Python制作简单的小程序IP查看器功能
2019/04/16 Python
django实现用户注册实例讲解
2019/10/30 Python
python 实现视频 图像帧提取
2019/12/10 Python
Python使用urllib模块对URL网址中的中文编码与解码实例详解
2020/02/18 Python
Python函数参数分类原理详解
2020/05/28 Python
Pyinstaller 打包发布经验总结
2020/06/02 Python
美国全球旅游运营商:Pacific Holidays
2018/06/18 全球购物
德国滑雪和户外用品网上商店:XSPO
2019/10/30 全球购物
经典的班主任推荐信
2013/10/28 职场文书
工商管理实习生自我鉴定范文
2013/12/18 职场文书
学年自我鉴定
2014/01/16 职场文书
学校百日安全生产活动总结
2014/07/05 职场文书
销售竞赛活动方案
2014/08/23 职场文书
六查六看剖析材料
2014/10/06 职场文书
《实心球》教学反思
2016/02/23 职场文书
MySQL三种方式实现递归查询
2022/04/18 MySQL