这个方法很强大,也能完成一些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对象还没没创建呢
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。