日期:2014-05-16  浏览次数:20405 次

JavaScript 学习笔记八 继承与引用

?

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 并未改变