这个方法很强大,也能完成一些JS内的继承。探索ing.......

    var q;
    var p = {x:1,y:2};
    q = Object.create(p);                    // 调用方法,返回新对象
    q.x = "x";                                // q的自有属性x
    console.log(q.x+" | "+q.__proto__.x);    // x | 1    q.x,q.y不是q对象的自有属性
    p = {x:"px"};
    console.log(q.x+" | "+q.__proto__.x);    // x | 1    重新改变p对象,不收影响
    q = Object.create(p);
    console.log(q.x+" | "+q.__proto__.x);    // px | px    调用方法之后,对象改变
    q.__proto__.test = "test";
    console.log(p.test);                    // test        看来方法是返回一个新对象引用,这个引用是指向p对象的
    // var a = Object.create(b);            a,b均为对象,则a._proto_指向b引用的对象,互相可以读写
    console.log(q.__proto__===p);            // true
    
    // 让我们还原一下
    p = {x:1,y:2};
    q = Object.create(p);
    // 这两个对象像是互相引用的关系,就像下面这样
    
    var a = {a1:"a1"};
    var b = {b1:"b1",b2:a};
    a.a2 = b;
    console.log(a.a2.b1);            // b1
    console.log(b.b2.a1);            // a1
    // 有同学会问为什么不能这样?
    var x = {x1:"x1",x2:y};
    var y = {y1:"y1",y2:x};
    console.log(x.x2.y1);            //  "Uncaught TypeError: Cannot read property 'y1' of undefined"
    // 哦别忘了,JS是从上到下执行的,你在x2赋值y的引用时,y对象还没没创建呢

Queen
139 声望20 粉丝