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 window.onload 加载多个函数和追加函数详解
Jan 08 Javascript
JQuery实现级联下拉框效果实例讲解
Sep 17 Javascript
基于Bootstrap实现图片轮播效果
May 22 Javascript
浅谈javascript控制HTML5的全屏操控,浏览器兼容的问题
Oct 10 Javascript
微信小程序 配置文件详细介绍
Dec 14 Javascript
浅谈js中的变量名和函数名重名
Feb 13 Javascript
JS数组操作中的经典算法实例讲解
Jul 26 Javascript
JS实现的简单四则运算计算器功能示例
Sep 27 Javascript
如何从0开始用node写一个自己的命令行程序
Dec 29 Javascript
vue中引入mxGraph的步骤详解
May 17 Javascript
微信小程序—setTimeOut定时器的问题及解决
Jul 26 Javascript
JavaScript Event Loop相关原理解析
Jun 10 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入门源程序
2006/10/09 PHP
Win2003下APACHE+PHP5+MYSQL4+PHPMYADMIN 的简易安装配置
2006/11/18 PHP
php配置php-fpm启动参数及配置详解
2013/11/04 PHP
thinkPHP下的widget扩展用法实例分析
2015/12/26 PHP
Javascript 检测、添加、移除样式(className)函数代码
2009/09/08 Javascript
浅析JS中document对象的一些重要属性
2014/03/06 Javascript
轻松学习jQuery插件EasyUI EasyUI创建树形菜单
2015/11/30 Javascript
js动态获取子复选项并设计全选及提交的实现方法
2016/06/24 Javascript
JS中利用localStorage防止页面动态添加数据刷新后数据丢失
2017/03/10 Javascript
nodejs连接mysql数据库简单封装示例-mysql模块
2017/04/10 NodeJs
JS时间控制实现动态效果的实例讲解
2017/07/31 Javascript
Node.js中使用mongoose操作mongodb数据库的方法
2017/09/12 Javascript
js 中rewrap-ajax.js插件实例代码
2017/10/20 Javascript
微信小程序textarea层级过高(盖住其他元素)问题的解决办法
2019/03/04 Javascript
使用Vue.js中的过滤器实现幂方求值的方法
2019/08/27 Javascript
python实现图片变亮或者变暗的方法
2015/06/01 Python
Django 实现下载文件功能的示例
2018/03/06 Python
Python序列循环移位的3种方法推荐
2018/04/09 Python
对pandas中iloc,loc取数据差别及按条件取值的方法详解
2018/11/06 Python
PyCharm 创建指定版本的 Django(超详图解教程)
2019/06/18 Python
python 哈希表实现简单python字典代码实例
2019/09/27 Python
python网络编程socket实现服务端、客户端操作详解
2020/03/24 Python
python实现学生成绩测评系统
2020/06/22 Python
python 中 .py文件 转 .pyd文件的操作
2021/03/04 Python
香蕉共和国Banana Republic官网:美国GAP旗下偏贵族风格服饰品牌
2016/11/21 全球购物
下列程序在32位linux或unix中的结果是什么
2014/03/25 面试题
审计工作个人的自我评价
2013/12/25 职场文书
村优秀党员事迹材料
2014/01/15 职场文书
《和田的维吾尔》教学反思
2014/04/14 职场文书
在校实习生求职信
2014/06/18 职场文书
党员年终个人总结
2015/02/14 职场文书
离婚起诉书范本
2015/05/18 职场文书
研讨会致辞
2015/07/31 职场文书
浅谈golang 中time.After释放的问题
2021/05/05 Golang
JavaScript 对象创建的3种方法
2021/11/17 Javascript
蓝牙耳机怎么连接电脑win11? Win11蓝牙耳机连接电脑的技巧
2023/01/09 数码科技