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 OOP类与继承
Nov 15 Javascript
用js实现table单元格高宽调整,兼容合并单元格(兼容IE6、7、8、FF)实例
Jun 25 Javascript
js将table的每个td的内容自动赋值给其title属性的方法
Oct 13 Javascript
详细讲解vue2+vuex+axios
May 27 Javascript
关于vue.js组件数据流的问题
Jul 26 Javascript
JavaScript表单即时验证 验证不成功不能提交
Aug 31 Javascript
从零开始封装自己的自定义Vue组件
Oct 09 Javascript
微信小程序自定义导航教程(兼容各种手机)
Dec 12 Javascript
vue 路由子组件created和mounted不起作用的解决方法
Nov 05 Javascript
微信小程序实现身份证取景框拍摄
Sep 09 Javascript
利用Vue实现简易播放器的完整代码
Dec 30 Vue.js
javascript实现拼图游戏
Jan 29 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
比较strtr, str_replace和preg_replace三个函数的效率
2013/06/26 PHP
php实现图片等比例缩放代码
2015/07/23 PHP
PHP编写登录验证码功能 附调用方法
2016/05/19 PHP
PHP简单实现记录网站访问量功能示例
2018/06/06 PHP
类似CSDN图片切换效果脚本
2009/09/17 Javascript
解决jquery中动态新增的元素节点无法触发事件问题的两种方法
2015/10/30 Javascript
js 弹出虚拟键盘修改密码的简单实例
2016/10/10 Javascript
实现图片首尾平滑轮播(JS原生方法—节流)
2017/10/17 Javascript
打字效果动画的4种实现方法(超简单)
2017/10/18 Javascript
vue集成百度UEditor富文本编辑器使用教程
2018/09/21 Javascript
JS实现的自定义map方法示例
2019/05/17 Javascript
vue登录注册实例详解
2019/09/14 Javascript
express中static中间件的具体使用方法
2019/10/17 Javascript
JavaScript实现图片伪异步上传过程解析
2020/04/10 Javascript
[01:20:06]TNC vs VG 2018国际邀请赛小组赛BO2 第二场 8.16
2018/08/17 DOTA
python计算最大优先级队列实例
2013/12/18 Python
python实现文件名批量替换和内容替换
2014/03/20 Python
Python实现的数据结构与算法之双端队列详解
2015/04/22 Python
简单介绍Python的Tornado框架中的协程异步实现原理
2015/04/23 Python
老生常谈Python进阶之装饰器
2017/05/11 Python
python面向对象_详谈类的继承与方法的重载
2017/06/07 Python
python爬取微信公众号文章
2018/08/31 Python
python PIL和CV对 图片的读取,显示,裁剪,保存实现方法
2019/08/07 Python
python lambda表达式在sort函数中的使用详解
2019/08/28 Python
pandas按照列的值排序(某一列或者多列)
2020/12/13 Python
Carolina Lemke Berlin澳大利亚官网:时尚太阳镜品牌
2019/09/17 全球购物
迪卡侬比利时官网:Decathlon比利时
2019/12/28 全球购物
TCP/IP中的TCP和IP分别承担什么责任
2012/04/21 面试题
学期自我鉴定范文
2013/10/01 职场文书
工程专业求职自荐书范文
2014/02/08 职场文书
高中军训感言500字
2014/02/24 职场文书
技术比武方案
2014/05/19 职场文书
2014年煤矿工作总结
2014/11/24 职场文书
通知怎么写?
2019/04/17 职场文书
教你做个可爱的css滑动导航条
2021/06/15 HTML / CSS
Mybatis-plus配置分页插件返回统一结果集
2022/06/21 Java/Android