JavaScript的原型继承
程序员文章站
2022-06-15 14:55:00
...
前言 |
什么是原型呢 |
原型是一种抽象,代表事务表象之下的联系,用简单的话来说,就是原型描述事物与事物之间的相似性。就比如说人,人本来是一个对象,女人也是一个对象,女人以人为基础,但是她有自己的属性。原型继承要求必须有一个对象可以作为另一个对象的基础,这样就可以基于已有对象创建新的对象。javascript的所有函数都有一个prototype属性,这个属性引用了一个对象,即原型对象,也简称原型。
什么是原型链呢 |
var o ={name:"我是祖宗"
};
//alert(typeof o);
// alert(typeof Object);
//如果需要原型,那么就一定要有函数
//每一个对象有一个属性叫_proto_这个属性就是这个对象的原型
//alert(o.__proto__);
//对象有原型,那么原型也是对象,原型也有原型
//所有的对象都来自于Object的对象
//所有的函数都来自于Function对象
//所有的函数是对象,继承自Function.prototype
//Function.prototype是对象,继承自Object.prototype
//Object.prototype是对象,继承自null
//obj是对象,继承自Object.Prototype
//Function 是对象,继承自Function.prototype
//Function是函数,继承自Function.prototype
//js成员的访问规则
//o.方法()
//首先在O当前这个类型中寻找该成员的定义,如果存在该成员的定义
//那么就直接使用该成员
//如果该成员不再当前类型中,就访问其原型(原型链中的上一级)
//以此类推,直到null位置
var f1 = function(){
this.name = "我是亚当";
};
f1.prototype=o;
var foo1 = new f1();
var f2 = function(){
this.name ="夏娃";
}
var foo2 = new f2();
foo2.__proto__ = foo1;
var f3 = function(){
this.name = "我是人类";
};
f3.prototype =foo2;
var foo3 = new f3();
alert(foo3.name);
这里最终的运行结果是“我是人类”,如果把 this.name = “我是人类”;注释了,就会显示“夏娃”,因为如果在对象本身中没有找到,就会去原型链中查找。同理如果把 this.name =“夏娃”;注释掉就会显示我是亚当。如果在整个原型链中都遍历过没有找到就会返回undefined.
原型继承 |
下面用模拟C#中的人类来说明原型继承
<!DOCTYPE html>
<html>
<head>
<title></title>
<style type="text/css">
</style>
<script type ="text/javascript">
//什么是原型继承
//如何实现原型继承
//模拟C#中的人类
var o ={
say:function(){
if(this.name && this.age && this.sex) alert("你好,我是"+this.name +",我今年" +this.age +"岁了,我是" +this.sex +"生");
},
get_Name:function(){
if(this.name) return this.name;
},
set_Name:function(value){
if(this.name) this.name = value;
}
};
var Person = function(name,age,sex){
this.name =name;
this.age =age;
this.sex =sex;
};
Person.prototype =o;
var p1 = new Person("赵晓虎",19,"男");
p1.say();
</script>
</head>
<body>
</body>
</html>
总结 |
上一篇: JavaScript继承,原型式继承
下一篇: JavaScript的原型继承
推荐阅读
-
非常不错的功能强大代码简单的管理菜单美化版_javascript技巧
-
Web笔记-layerui的基本使用及JavaScript回调函数的写法
-
JavaScript开发toggle()隐藏问题的解决方法
-
javascript - 以后我们的会不会被Saas厂商的服务所包围?
-
什么是javascript对象和数组的初始化表达式?
-
js按指定格式显示日期时间的样式代码_javascript技巧
-
深入理解Javascript中this的作用域_javascript技巧
-
function, new function, new Function之间的区别_javascript技巧
-
Javascript中的相等与不等运算_javascript技巧
-
ff chrome和ie下全局动态定位的异同及全局高度的取法_javascript技巧