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的$.cookie()实现跨越页面tabs导航实现代码
Mar 03 Javascript
『JavaScript』限制Input只能输入数字实现思路及代码
Apr 22 Javascript
javascript Array.prototype.slice的使用示例
Nov 14 Javascript
jQuery拖拽插件gridster使用指南
Apr 21 Javascript
详解Angular开发中的登陆与身份验证
Jul 27 Javascript
JS作用域深度解析
Dec 29 Javascript
js中字符型和数值型数字的互相转化方法(必看)
Apr 25 Javascript
vue中eventbus被多次触发以及踩过的坑
Dec 02 Javascript
微信小程序使用map组件实现路线规划功能示例
Jan 22 Javascript
JS实现的点击按钮图片上下滚动效果示例
Jan 28 Javascript
利用angular自动编译andriod APK的绕坑经历分享
Mar 08 Javascript
微信自定义分享链接信息(标题,图片和内容)实现过程详解
Sep 04 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中autoload的用法总结
2013/11/08 PHP
PHP实现JS中escape与unescape的方法
2016/07/11 PHP
一些常用的JS功能函数代码
2009/06/23 Javascript
js获取客户端外网ip的简单实例
2013/11/21 Javascript
js 对小数加法精度处理示例说明
2013/12/27 Javascript
JS方法调用括号的问题探讨
2014/01/24 Javascript
jquery实现类似淘宝星星评分功能实例
2014/09/12 Javascript
Javascript实现颜色rgb与16进制转换的方法
2015/04/18 Javascript
JavaScript中用toString()方法返回时间为字符串
2015/06/12 Javascript
jQuery采用连缀写法实现的折叠菜单效果
2015/09/18 Javascript
javascript针对cookie的基本操作实例详解
2015/11/30 Javascript
javascript设置和获取cookie的方法实例详解
2016/01/05 Javascript
bootstrap vue.js实现tab效果
2017/02/07 Javascript
Angular.js中控制器之间的传值详解
2017/04/24 Javascript
利用纯JS实现像素逐渐显示的方法示例
2017/08/14 Javascript
Webpack中雪碧图插件使用详解
2018/05/25 Javascript
jQuery Datatables 动态列+跨列合并实现代码
2020/01/30 jQuery
Vue 打包体积优化方案小结
2020/05/20 Javascript
python字符串排序方法
2014/08/29 Python
Python的Flask框架中实现分页功能的教程
2015/04/20 Python
Python中的random()方法的使用介绍
2015/05/15 Python
python获取指定路径下所有指定后缀文件的方法
2015/05/26 Python
Python爬取网易云音乐上评论火爆的歌曲
2017/01/19 Python
500行Python代码打造刷脸考勤系统
2019/06/03 Python
安装好Pycharm后如何配置Python解释器简易教程
2019/06/28 Python
Python Websocket服务端通信的使用示例
2020/02/25 Python
Skyscanner阿联酋:全球领先的旅游搜索平台
2017/11/25 全球购物
阿迪达斯荷兰官方网站:adidas荷兰
2018/03/16 全球购物
美国最大的船只买卖在线市场:Boat Trader
2018/08/04 全球购物
瑞士领先的网上超市:LeShop.ch
2018/11/14 全球购物
超市开业庆典策划方案
2014/05/14 职场文书
监督检查工作方案
2014/05/28 职场文书
新教师培训方案
2014/06/08 职场文书
学校门卫岗位职责范本
2014/06/30 职场文书
2015年高校保卫处工作总结
2015/07/23 职场文书
2016公司中秋节寄语
2015/12/07 职场文书