JavaScript中继承的一些示例方法与属性参考


Posted in Javascript onAugust 07, 2010

prototype 属性的作用:
利用prototype 属性提供对象的类的一组基本功能。对象的新实例“继承”赋予该对象原型的操作。

prototype 属性的功能:
所有JavaScript 内部对象都有只读的prototype 属性。可以为内部对象的原型添加功能,但该对象不能被赋予不同的原型。
然而,用户定义的对象可以被赋给新的原型。

constructor 属性的作用:
constructor 表示创建对象的函数。

constructor 属性的功能:
constructor 属性是所有具有 prototype 的对象的成员。它们包括除 Global 和 Math 对象以外的所有 JavaScript 内部对象。
constructor 属性保存了对构造特定对象实例的函数的引用。

A 利用prototype 添加对象的属性 [ 方式一]
示例:

<script type="text/javascript"> 
//方式一 
var myObj = function(){ 
this.study = "JavaScript"; 
} 
myObj.prototype.hobby = function() 
{ 
this.hobby = "See girl"; 
} 
var newObj = new myObj(); 
for ( var attr in newObj ) 
{ 
document.write( attr +"<br/>" ); 
} 
</script>

B 利用prototype 添加对象的属性 [ 方式二]
示例:

<script type="text/javascript"> 
//方式二 
var superObj = { name:"xugang" }; 
var subObj = { age:20 }; 
function extend(superObj,subObj){ 
//获得父对象的原型对象 
subObj.getSuper = superObj.prototype; 
//将父对象的属性给子对象 
for(var i in superObj){ 
subObj[i] = superObj[i]; 
} 
} 
extend(superObj,subObj); 
for ( var s in subObj ) 
{ 
document.write( s +"<br/>" ); //遍历子对象的属性 
} 
</script>

C 利用prototype 继承父类的原型属性
示例:

<script> 
function Person(_name){ 
this.name = _name; 
} 
//创建对象(用于更改 prototype 原型对象) 
function addSex(_sex){ 
this.sex = _sex; 
} 
//更改原型对象 
Person.prototype = new addSex('男'); 
var p = new Person('xugang'); 
alert("p 的原型为:" + p.constructor); 
//打印所有属性 
for(var i in p){ 
//alert(p[i]); 
} // ================= 继承 ================= 
//创建子对象 Student 
function Student(_study){ 
this.study = _study; 
} 
// 通过 prototype 让 Student 继承 Person 
Student.prototype = new Person('刘德华'); 
var stu1 = new Student('JS'); 
alert("stu1 的原型为:" + stu1.constructor); 
for(var i in stu1){ 
alert(stu1[i]); 
} 
</script>

因为Student 对象的原型更改为Person 对象,而Person 对象的原型更改为addSex ,所以,Student 对象的原型为addSex 。
注意:一个对象的原型是在 new 对象的那一刻确定的,如果在 new 对象以后更改无效!

D 如何设置对象的原型对象和构造函数
示例:

<script type="text/javascript"> 
function B(){ 
this.name = "刘德华"; 
return "B方法"; 
} 
function C(){ 
this.age = 42; 
return "C方法"; 
} 
B.prototype = new C(); 
var b = new B(); 
b.constructor = B; //重写b的构造方法为B本身 
document.write("b 的构造方法:"); 
document.write(b.constructor() + "<br/>"); 
document.write("b 的原型对象的构造方法:"); 
document.write(b.constructor.prototype.constructor() + "<br/>"); 
for ( var m in b ) 
{ 
document.write("属性:" + m ); 
document.write(" 值:" + b[m] +"<br/>"); 
} 
</script>

结果如下:
b 的构造方法:B方法
b 的原型对象的构造方法:C方法
属性:age 值:42
属性:name 值:刘德华

E 对象中用来保存原型的 __proto__ 变量
示例:

<script type="text/javascript"> 
function myObject(){} 
var my = new myObject(); 
//任何对象都会有一个隐藏的 __proto__ 变量用来保存原型 
document.write(my.__proto__ + "<br/>"); 
//在 Internet Explorer 下显示为:undefined 
//在 Mozilla Firefox 下显示为:[object Object] function Person(){ 
this.name = "刘德华"; 
return "Person 方法"; 
} 
/* 
定义方法后,在内存中相当于: 
Person.prototype = { constructor:Person } 
*/ 
//改变 Person 对象的原型对象 
function Super_Person(){ 
this.hobby = "唱歌"; 
return "Super_Person 方法"; 
} 
Person.prototype = new Super_Person(); 
var newObj = new Person(); 
/* 使用 new 创建对象过程: 
var o = {}; 
Person.prototype.constructor.call(o); 
o = {__proto__:Person.prototype,name = "刘德华"}; 
return o; 
*/ 
document.write(newObj.constructor.prototype.constructor() + "<br/>"); 
//打印newObj原型对象(在 IE 下无效!) 
document.write(newObj.__proto__.constructor() + "<br/>"); 
</script>

在 Firefox 中的结果如下:
[object Object]
Super_Person 方法
Super_Person 方法
Javascript 相关文章推荐
javascript禁制后退键(Backspace)实例代码
Nov 15 Javascript
AngularJS基础学习笔记之指令
May 10 Javascript
全面解析标签页的切换方式
Aug 21 Javascript
利用JS提交表单的几种方法和验证(必看篇)
Sep 17 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
Mar 08 Javascript
angular+ionic返回上一页并刷新页面
Aug 08 Javascript
AngularJS 中的数据源的循环输出
Oct 12 Javascript
解决vue-router中的query动态传参问题
Mar 20 Javascript
js实现简单选项卡功能
Mar 23 Javascript
js实现数字从零慢慢增加到指定数字示例
Nov 07 Javascript
vue实现移动端拖动排序
Aug 21 Javascript
swiperjs实现导航与tab页的联动
Dec 13 Javascript
javascript 防止刷新,后退,关闭
Aug 07 #Javascript
纯CSS打造的导航菜单(附jquery版)
Aug 07 #Javascript
基于jquery的商品展示放大镜
Aug 07 #Javascript
jquery autocomplete自动完成插件的的使用方法
Aug 07 #Javascript
jQuery的实现原理的模拟代码 -5 Ajax
Aug 07 #Javascript
javascript new fun的执行过程
Aug 05 #Javascript
过虑特殊字符输入的js代码
Aug 05 #Javascript
You might like
关于文本留言本的分页代码
2006/10/09 PHP
php写入数据到CSV文件的方法
2015/03/14 PHP
Laravel使用消息队列需要注意的一些问题
2017/12/13 PHP
jQuery对象的链式操作用法分析
2016/05/10 Javascript
jQuery实现每隔几条元素增加1条线的方法
2016/06/27 Javascript
浅谈JavaScript中的分支结构
2016/07/01 Javascript
JS实现获取图片大小和预览的方法完整实例【兼容IE和其它浏览器】
2017/04/24 Javascript
jQuery用户头像裁剪插件cropbox.js使用详解
2017/06/07 jQuery
jquery拖动改变div大小
2017/07/04 jQuery
JS路由跳转的简单实现代码
2017/09/21 Javascript
详解利用Angular实现多团队模块化SPA开发框架
2017/11/27 Javascript
js实现移动端轮播图
2020/12/21 Javascript
基于mpvue搭建微信小程序项目框架的教程详解
2019/04/10 Javascript
jquery弹窗时禁止body滚动条滚动的例子
2019/09/21 jQuery
JavaScript对象字面量和构造函数原理与用法详解
2020/04/18 Javascript
[55:35]VGJ.S vs Mski Supermajor小组赛C组 BO3 第二场 6.3
2018/06/04 DOTA
Python判断文本中消息重复次数的方法
2016/04/27 Python
python difflib模块示例讲解
2017/09/13 Python
python3 打开外部程序及关闭的示例
2018/11/06 Python
在Pycharm中将pyinstaller加入External Tools的方法
2019/01/16 Python
django admin组件使用方法详解
2019/07/19 Python
python爬虫 Pyppeteer使用方法解析
2019/09/28 Python
Python 进程操作之进程间通过队列共享数据,队列Queue简单示例
2019/10/11 Python
在Pytorch中计算卷积方法的区别详解(conv2d的区别)
2020/01/03 Python
python opencv 图像边框(填充)添加及图像混合的实现方法(末尾实现类似幻灯片渐变的效果)
2020/03/09 Python
python 爬虫之selenium可视化爬虫的实现
2020/12/04 Python
python文件路径操作方法总结
2020/12/21 Python
会计专业自荐信
2013/12/02 职场文书
前台接待岗位职责
2013/12/03 职场文书
培训研修方案
2014/06/06 职场文书
建筑工地标语
2014/06/18 职场文书
敬老院义诊活动总结
2015/05/07 职场文书
创业计划书之酒吧
2019/12/02 职场文书
ElementUI实现el-form表单重置功能按钮
2021/07/21 Javascript
Redis 操作多个数据库的配置的方法实现
2022/03/23 Redis
win11无法登录onedrive错误代码0x8004def7怎么办 ?
2022/04/05 数码科技