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 相关文章推荐
jquery 常用操作整理 基础入门篇
Oct 14 Javascript
最佳JS代码编写的14条技巧
Jan 09 Javascript
js关闭子窗体刷新父窗体实现方法
Dec 04 Javascript
jquery计算鼠标和指定元素之间距离的方法
Jun 26 Javascript
BootstrapTable与KnockoutJS相结合实现增删改查功能【二】
May 10 Javascript
jQuery实现字符串全部替换的方法
Dec 12 Javascript
基于JavaScript实现屏幕滚动效果
Jan 18 Javascript
JS中实现函数return多个返回值的实例
Feb 21 Javascript
JavaScript 过滤关键字
Mar 20 Javascript
基于vue 添加axios组件,解决post传参数为null的问题
Mar 05 Javascript
详解如何在你的Vue项目配置vux
Jun 04 Javascript
Typescript 中的 interface 和 type 到底有什么区别详解
Jun 18 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
Protoss兵种介绍
2020/03/14 星际争霸
PHP 彩色文字实现代码
2009/06/29 PHP
php中长文章分页显示实现代码
2012/09/29 PHP
解析PHP中VC6 X86和VC9 X86的区别及 Non Thread Safe的意思
2013/06/28 PHP
PHP实现PDO的mysql数据库操作类
2014/12/12 PHP
thinkphp框架无限级栏目的排序功能实现方法示例
2020/03/29 PHP
xml转json的js代码
2012/08/28 Javascript
jQuery基础框架浅入剖析
2012/12/27 Javascript
js循环改变div颜色具体方法
2013/06/25 Javascript
使用闭包对setTimeout进行简单封装避免出错
2013/07/10 Javascript
JS实现的新浪微博大厅文字内容滚动效果代码
2015/11/05 Javascript
javascript实现瀑布流动态加载图片原理
2016/08/12 Javascript
JS简单实现浮动窗口效果示例
2016/09/07 Javascript
打造自己的jQuery插件入门教程
2016/09/23 Javascript
微信小程序获取循环元素id以及wx.login登录操作
2017/08/17 Javascript
JS实现的ajax和同源策略(实例讲解)
2017/12/01 Javascript
详解Angular如何正确的操作DOM
2018/07/06 Javascript
jQuery无冲突模式详解
2019/01/17 jQuery
微信小程序学习笔记之文件上传、下载操作图文详解
2019/03/29 Javascript
JS去除字符串最后的逗号实例分析【四种方法】
2019/06/20 Javascript
简要讲解Python编程中线程的创建与锁的使用
2016/02/28 Python
Python 探针的实现原理
2016/04/23 Python
python实现对文件中图片生成带标签的txt文件方法
2018/04/27 Python
python多进程使用函数封装实例
2020/05/02 Python
Python数据库封装实现代码示例解析
2020/09/05 Python
CSS3 特效范例整理
2011/08/22 HTML / CSS
美国马匹用品和马钉购物网站:State Line Tack
2018/08/05 全球购物
倩碧澳大利亚官网:Clinique澳大利亚
2019/07/22 全球购物
Scotch Porter官方网站:男士美容产品
2020/08/31 全球购物
幼儿园教师国培感言
2014/02/02 职场文书
护士演讲稿优秀范文
2014/04/30 职场文书
实习生个人总结范文
2015/02/28 职场文书
高一化学教学反思
2016/02/22 职场文书
导游词之任弼时故居
2020/01/07 职场文书
详解如何在Canvas中添加事件的方法
2021/04/17 Javascript
用Java实现简单计算器功能
2021/07/21 Java/Android