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 相关文章推荐
如何用js控制css中的float的代码
Aug 16 Javascript
关于Jqzoom的使用心得 jquery放大镜效果插件
Apr 12 Javascript
基于jquery的鼠标拖动效果代码
May 30 Javascript
JavaScript中的细节分析
Jun 30 Javascript
原生js 秒表实现代码
Jul 24 Javascript
jquery获得option的值和对option进行操作
Dec 13 Javascript
全面了解javascript三元运算符
Jun 27 Javascript
Bootstrap常用组件学习(整理)
Mar 24 Javascript
JQueryMiniUI按照时间进行查询的实现方法
Jun 07 jQuery
Vue中引入样式文件的方法
Aug 18 Javascript
React如何将组件渲染到指定DOM节点详解
Sep 08 Javascript
Element Carousel 走马灯的具体实现
Jul 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
关于PHP语言构造器介绍
2013/07/08 PHP
PHP 使用pcntl和libevent 实现Timer功能
2013/10/27 PHP
ThinkPHP无限级分类原理实现留言与回复功能实例
2014/10/31 PHP
thinkPHP下ueditor的使用方法详解
2015/12/26 PHP
微信小程序 消息推送php服务器验证实例详解
2017/03/30 PHP
php利用云片网实现短信验证码功能的示例代码
2017/11/18 PHP
Laravel框架使用monolog_mysql实现将系统日志信息保存到mysql数据库的方法
2018/08/16 PHP
PHP实现简易用户登录系统
2020/07/10 PHP
[Web]防止用户复制页面内容和另存页面的方法
2009/02/06 Javascript
Mootools 1.2 手风琴(Accordion)教程
2009/09/15 Javascript
Javascript中自动切换焦点实现代码
2012/12/15 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
jQuery中Dom的基本操作小结
2014/01/23 Javascript
jquery表单验证插件(jquery.validate.js)的3种使用方式
2015/03/28 Javascript
JQuery控制图片由中心点逐渐放大效果
2016/06/26 Javascript
详解jQuery中关于Ajax的几个常用的函数
2017/07/17 jQuery
js构造函数constructor和原型prototype原理与用法实例分析
2020/03/02 Javascript
Python列表list操作符实例分析【标准类型操作符、切片、连接字符、列表解析、重复操作等】
2017/07/24 Python
用python打印菱形的实操方法和代码
2019/06/25 Python
详解python中__name__的意义以及作用
2019/08/07 Python
python利用datetime模块计算程序运行时间问题
2020/02/20 Python
Pycharm IDE的安装和使用教程详解
2020/04/30 Python
pyecharts调整图例与各板块的位置间距实例
2020/05/16 Python
如何基于Python代码实现高精度免费OCR工具
2020/06/18 Python
使用SimpleITK读取和保存NIfTI/DICOM文件实例
2020/07/01 Python
纯css3实现的动画按钮的实例教程
2014/11/17 HTML / CSS
Molton Brown美国官网:奢华美容、香水、沐浴和身体护理
2020/09/02 全球购物
英文简历中的自我评价
2013/10/06 职场文书
师范生求职信
2014/06/14 职场文书
股东出资证明书(正规版)
2014/09/24 职场文书
结婚老公保证书
2015/02/26 职场文书
新教师教学工作总结
2015/08/12 职场文书
Django如何与Ajax交互
2021/04/29 Python
Python办公自动化之教你如何用Python将任意文件转为PDF格式
2021/06/28 Python
Java获取e.printStackTrace()打印的信息方式
2021/08/07 Java/Android
Android移动应用开发指南之六种布局详解
2022/09/23 Java/Android