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 相关文章推荐
学习ExtJS accordion布局
Oct 08 Javascript
Js数组的操作push,pop,shift,unshift等方法详细介绍
Dec 28 Javascript
扩展JS Date对象时间格式化功能的小例子
Dec 02 Javascript
jquery常用函数与方法汇总
Sep 01 Javascript
EasyUi combotree 实现动态加载树节点
Apr 01 Javascript
angular实现表单验证及提交功能
Feb 01 Javascript
详解JavaScript函数callee、call、apply的区别
Mar 08 Javascript
微信小程序开发实现的IP地址查询功能示例
Mar 28 Javascript
Vue实现购物车详情页面的方法
Aug 20 Javascript
Javascript中的this,bind和that使用实例
Dec 05 Javascript
jQuery 添加元素和删除元素的方法
Jul 15 jQuery
JavaScript实现队列结构过程
Dec 06 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 下载保存文件保存到本地的两种实现方法
2013/08/12 PHP
PHP中SQL查询语句的id=%d解释(推荐)
2016/12/10 PHP
js程序中美元符号$是什么
2008/06/05 Javascript
jqGrid jQuery 表格插件测试代码
2011/08/23 Javascript
jQuery Jcrop插件实现图片选取功能
2011/11/23 Javascript
深入理解事件冒泡(Bubble)和事件捕捉(capture)
2016/05/28 Javascript
Web性能优化系列 10个提升JavaScript性能的技巧
2016/09/27 Javascript
Vue.js基础知识小结
2017/01/13 Javascript
xmlplus组件设计系列之路由(ViewStack)(7)
2017/05/02 Javascript
Angular.JS中指令ng-if、ng-show/ng-hide和ng-switch的使用教程
2017/05/07 Javascript
JavaScript制作简单的框选图表
2017/05/15 Javascript
vue router-link传参以及参数的使用实例
2017/11/10 Javascript
10行原生JS实现文字无缝滚动(超简单)
2018/01/02 Javascript
浅谈手写node可读流之流动模式
2018/06/01 Javascript
vue axios数据请求get、post方法及实例详解
2018/09/11 Javascript
前端天气插件tpwidget使用方法详解
2019/06/24 Javascript
vue-router 路由传参用法实例分析
2020/03/06 Javascript
vant中的toast轻提示实现代码
2020/11/04 Javascript
[38:39]完美世界DOTA2联赛循环赛 IO vs GXR BO2第二场 11.04
2020/11/05 DOTA
python爬虫headers设置后无效的解决方法
2017/10/21 Python
python3大文件解压和基本操作
2017/12/15 Python
python实现两个文件合并功能
2018/04/01 Python
python 使用re.search()筛选后 选取部分结果的方法
2018/11/28 Python
python绘制彩虹图
2019/12/16 Python
Python 实现将某一列设置为str类型
2020/07/14 Python
python 获取谷歌浏览器保存的密码
2021/01/06 Python
一款纯css3实现的响应式导航
2014/10/31 HTML / CSS
夏威夷咖啡公司:Hawaii Coffee Company
2019/09/19 全球购物
汽车检测与维修专业求职信
2013/10/30 职场文书
行政专员工作职责
2013/12/22 职场文书
检察官就职演讲稿
2014/01/13 职场文书
个人查摆剖析材料
2014/02/04 职场文书
感恩节寄语2015
2015/03/24 职场文书
培训班通知
2015/04/25 职场文书
教你用python实现12306余票查询
2021/06/30 Python
解决linux下redis数据库overcommit_memory问题
2022/02/24 Redis