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 相关文章推荐
JavaScript For Beginners(转载)
Jan 05 Javascript
用 Javascript 验证表单(form)中的单选(radio)值
Sep 08 Javascript
初学js插入节点appendChild insertBefore使用方法
Jul 04 Javascript
元素未显示设置width/height时IE中使用currentStyle获取为auto
May 04 Javascript
JQuery教学之性能优化
May 14 Javascript
复制网页内容,粘贴之后自动加上网址的实现方法(脚本之家特别整理)
Oct 16 Javascript
浅谈window.onbeforeunload() 事件调用ajax
Jun 29 Javascript
Node.js websocket使用socket.io库实现实时聊天室
Feb 20 Javascript
vue移动端监听滚动条高度的实现方法
Sep 03 Javascript
JS学习笔记之原型链和利用原型实现继承详解
May 29 Javascript
JavaScript canvas绘制圆弧与圆形
Feb 18 Javascript
jquery实现简单拖拽效果
Jul 20 jQuery
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
收音机史话 - 1960年代前后的DIY
2021/03/02 无线电
PHP 编写的 25个游戏脚本
2009/05/11 PHP
php基本函数汇总
2015/07/09 PHP
PHP生成随机密码方法汇总
2015/08/27 PHP
thinkphp框架下实现登录、注册、找回密码功能
2016/04/06 PHP
微信支付开发交易通知实例
2016/07/12 PHP
php封装的page分页类完整实例代码
2020/02/01 PHP
php设计模式之原型模式分析【星际争霸游戏案例】
2020/03/23 PHP
Add a Table to a Word Document
2007/06/15 Javascript
JavaScript QueryString解析类代码
2010/01/17 Javascript
为Extjs加加速(javascript加速)
2010/08/19 Javascript
各浏览器对click方法的支持差异小结
2011/07/31 Javascript
jquery 删除cookie失效的解决方法
2013/11/12 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
jQuery实现表格颜色交替显示的方法
2015/03/09 Javascript
Javascript简写条件语句(推荐)
2016/06/12 Javascript
jQuery查看选中对象HTML代码的方法
2016/06/17 Javascript
js实现显示手机号码效果
2017/03/09 Javascript
详解webpack 如何集成第三方js库
2017/06/29 Javascript
微信小程序实现分享到朋友圈功能
2018/07/19 Javascript
微信jssdk踩坑之签名错误invalid signature
2020/05/19 Javascript
js实现从右往左匀速显示图片(无缝轮播)
2020/06/29 Javascript
python的dict,set,list,tuple应用详解
2014/07/24 Python
python dict.get()和dict['key']的区别详解
2016/06/30 Python
Windows下安装python MySQLdb遇到的问题及解决方法
2017/03/16 Python
使用Python实现博客上进行自动翻页
2017/08/23 Python
Python协程的用法和例子详解
2017/09/09 Python
Python 实现某个功能每隔一段时间被执行一次的功能方法
2018/10/14 Python
python 获取等间隔的数组实例
2019/07/04 Python
综合实践活动方案
2014/02/14 职场文书
诚信承诺书模板
2014/05/26 职场文书
服务行业口号
2014/06/11 职场文书
司机岗位职责
2015/02/04 职场文书
高三毕业感言
2015/07/30 职场文书
股东合作协议书模板2篇
2019/11/05 职场文书
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android