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 相关文章推荐
boxy基于jquery的弹出层对话框插件扩展应用 弹出层选择器
Nov 21 Javascript
更优雅的事件触发兼容
Oct 24 Javascript
AngularJs Javascript MVC 框架
Jun 20 Javascript
JavaScript 节流函数 Throttle 详解
Jul 04 Javascript
深入理解AngularJS中的ng-bind-html指令
Mar 27 Javascript
基于JavaScript实现瀑布流效果
Mar 29 Javascript
jQuery实现全选、反选和不选功能
Aug 16 jQuery
详解Vue.js iview实现树形权限表(可扩展表)
Sep 30 Javascript
简单了解Ajax表单序列化的实现方法
Jun 14 Javascript
详解vue页面首次加载缓慢原因及解决方案
Nov 06 Javascript
vue中用 async/await 来处理异步操作
Jul 18 Javascript
js实现飞机大战小游戏
Aug 26 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
索尼SONY ICF-SW7600GR电路分析与改良
2021/03/02 无线电
php json_encode()函数返回json数据实例代码
2014/10/10 PHP
PHP实现事件机制实例分析
2015/06/26 PHP
PHP中strtr与str_replace函数运行性能简单测试示例
2019/06/22 PHP
document 和 document.all 分别什么时候用
2006/06/22 Javascript
js split 的用法和定义 js split分割字符串成数组的实例代码
2012/05/13 Javascript
JS加jquery简单实现标签元素的显示或隐藏
2013/09/23 Javascript
简介JavaScript中Math.cos()余弦方法的使用
2015/06/15 Javascript
JavaScript类继承及实例化的方法
2015/07/25 Javascript
JavaScript小技巧整理
2015/12/30 Javascript
原生javascript实现addClass,removeClass,hasClass函数
2016/02/25 Javascript
jQuery插件开发汇总
2016/05/15 Javascript
javascript js 操作数组 增删改查的简单实现
2016/06/20 Javascript
如何利用JSHint减少JavaScript的错误
2016/08/23 Javascript
angularjs项目的页面跳转如何实现(5种方法)
2017/05/25 Javascript
实例解析ES6 Proxy使用场景介绍
2018/01/08 Javascript
详解ES6中的Map与Set集合
2019/03/22 Javascript
微信小程序停止其他视频播放当前视频的实例代码
2019/12/25 Javascript
一文秒懂JavaScript构造函数、实例、原型对象以及原型链
2020/08/25 Javascript
js实现磁性吸附的示例
2020/10/26 Javascript
[01:03:41]DOTA2-DPC中国联赛 正赛 Dynasty vs XG BO3 第三场 2月2日
2021/03/11 DOTA
Django 全局的static和templates的使用详解
2019/07/19 Python
Lands’ End官网:经典的美国生活方式品牌
2016/08/14 全球购物
芬兰攀岩、山地运动和户外活动用品购物网站:Bergfreunde
2016/10/06 全球购物
个人求职简历的自我评价
2013/10/19 职场文书
水果连锁超市创业计划书
2014/01/24 职场文书
九年级政治教学反思
2014/02/06 职场文书
工业设计毕业生自荐信
2014/04/13 职场文书
《祁黄羊》教学反思
2014/04/22 职场文书
学校安全工作汇报材料
2014/08/16 职场文书
银行竞聘上岗演讲稿
2014/09/12 职场文书
实习指导教师评语
2014/12/30 职场文书
公司奖励通知
2015/04/21 职场文书
宇宙与人观后感
2015/06/05 职场文书
Django对接elasticsearch实现全文检索的示例代码
2021/08/02 Python
mybatis源码解读之executor包语句处理功能
2022/02/15 Java/Android