function logs(obj){document.write(obj+"<br/>");} //打印log日志
//继承
//继承可以通过原型链来实现
//解释器会在对象中查找该属性,如果
//没有找到,则在其内部对象 prototype 对象上搜索,由于 prototype 对象与对象本身的结
//构是一样的,因此这个过程会一直回溯到发现该属性,则调用该属性,否则,报告一个错误。
function Base(){
var name = "josn";
this.baseFunc = function(){
logs("base behavior");
}
this.getName = function(){
return name;
}
}
function Middle(){
this.middleFunc = function(){
logs("middle behavior");
}
}
Middle.prototype = new Base();//原型上进行继承
var mid = new Middle();
mid.middleFunc(); //自有函数
mid.baseFunc(); //继承自父类 Base
//引用
// 引用始终指向最终的对象,而并非引用本身
var obj = {};//空对象
var ref = obj;//引用
obj.name = "objectA";
logs(ref.name);;//objectA ref跟着添加了name属性
obj.name = "objectB"; //修改原始的那个对象会影响到其引用上,这一点也应该注意。
obj = ["one","two","three","d"];
obj.name = "objectC";
logs(ref.name);/*objectA ref还指向原来的对象*/logs(obj.length);//4 数组的长度
//obj 只是对一个匿名对象的引用,所以,ref 并非指向它,当 obj 指向另一个数组对象时
//可以看到,引用 ref 并未改变
JavaScript 学习笔记八 继承与引用
点赞
收藏