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 相关文章推荐
基于jQuery实现鼠标点击导航菜单水波动画效果附源码下载
Jan 06 Javascript
jquery自动补齐功能插件flexselect用法示例
Aug 06 Javascript
jQuery 选择器(61种)整理总结
Sep 26 Javascript
微信小程序 后台https域名绑定和免费的https证书申请详解
Nov 10 Javascript
微信小程序 动态绑定事件并实现事件修改样式
Apr 13 Javascript
ES6新特性八:async函数用法实例详解
Apr 21 Javascript
vue中for循环更改数据的实例代码(数据变化但页面数据未变)
Sep 15 Javascript
Vue.js 中的 v-show 指令及用法详解
Nov 19 Javascript
微信小程序实现商城倒计时
Nov 01 Javascript
OpenLayers加载缩放控件使用方法详解
Sep 25 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
vue实现滑动解锁功能
Mar 03 Vue.js
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
PHP的SQL注入过程分析
2012/01/06 PHP
为PHP安装imagick时出现Cannot locate header file MagickWand.h错误的解决方法
2014/11/03 PHP
WordPress开发中自定义菜单的相关PHP函数使用简介
2016/01/05 PHP
php防止sql注入的方法详解
2017/02/20 PHP
利用php-cli和任务计划实现订单同步功能的方法
2017/05/03 PHP
PHP数据库操作三:redis用法分析
2017/08/16 PHP
Laravel框架生命周期与原理分析
2018/06/12 PHP
动态调用css文件——jquery的应用
2007/02/20 Javascript
iis6+javascript Add an Extension File
2007/06/13 Javascript
jquery form表单提交插件asp.net后台中文解码
2010/06/12 Javascript
JavaScript中判断整字类型最简洁的实现方法
2014/11/08 Javascript
微信小程序 页面跳转及数据传递详解
2017/03/14 Javascript
微信小程序 后台登录(非微信账号)实例详解
2017/03/31 Javascript
基于JQuery和原生JavaScript实现网页定位导航特效
2017/04/03 jQuery
jQuery 添加样式属性的优先级别方法(推荐)
2017/06/08 jQuery
ES6扩展运算符用法实例分析
2017/10/31 Javascript
echarts实现词云自定义形状的示例代码
2019/02/20 Javascript
react实现antd线上主题动态切换功能
2019/08/12 Javascript
js prototype和__proto__的关系是什么
2019/08/23 Javascript
浅谈关于vue中scss公用的解决方案
2019/12/02 Javascript
JS实现数据动态渲染的竖向步骤条
2020/06/24 Javascript
如何在 Vue 表单中处理图片
2021/01/26 Vue.js
[01:00:53]2018DOTA2亚洲邀请赛3月29日 小组赛B组 iG VS Secret
2018/03/30 DOTA
python 多线程应用介绍
2012/12/19 Python
Python实现的ini文件操作类分享
2014/11/20 Python
关于Python数据结构中字典的心得
2017/12/04 Python
在Python中append以及extend返回None的例子
2019/07/20 Python
python输出决策树图形的例子
2019/08/09 Python
如何用Python进行时间序列分解和预测
2021/03/01 Python
房地产财务部员工岗位职责
2014/03/12 职场文书
英文演讲稿开场白
2014/08/25 职场文书
专题组织生活会思想汇报
2014/10/01 职场文书
校运会班级霸气口号
2015/12/24 职场文书
《乌鸦喝水》教学反思
2016/02/19 职场文书
vue3使用vuedraggable实现拖拽功能
2022/04/06 Vue.js
nginx静态资源的服务器配置方法
2022/07/07 Servers