js的原型式继承问题:
function object(o) {
function F(){}
F.prototype = o;
return new F();
}
这段代码中F.prototype = o 进行了浅复制,为什么呢?o是对象,传递的是引用,不是应该没有复制才对么?
function Person(age,name) { this.age = age; this.name = name; this.dance = function () { console.log("i'm " + this.name + " at my " + this.age); }; } var jim = new Person(18, "James Green"); function Driver() { } Driver.prototype = jim; var kate = new Driver(); //创建了kate的实例成员name,所以之后的kate.name都是变了 kate.name = "Katherin Green"; //调用kate的dance时候,发现没有定义的实例方法,转而寻找原型方法, //而此时里面的name是实例的,age还是原来的原型 kate.dance();//i'm Katherin Green at my 18 jim.dance();//i'm James Green at my 18 //看到了吧,没有复制吧? jim.age = 19; kate.dance(); //i'm Katherin Green at my 19 jim.dance(); //i'm James Green at my 19 kate.age=21; kate.dance(); //i'm Katherin Green at my 21 jim.dance(); //i'm James Green at my 19 delete kate.age; kate.dance(); //i'm Katherin Green at my 19 //总结: //实际上是没有对象的复制的,只是让你有办法可以有通过原型方法访问到jim成员的途径而已 //而最终的若是有kate本身的实例成员(name)出现的话,原型(name)会被隐藏,当实例成员的name被删除时候,原型就又会出现了
哥们,给力!
其实这样返回的对象就可以有了o中所有的属性(不管是实例的还是原型上的)
我想问的是为什么会进行了浅复制了···就是说F.prototype指向的对象和o指向的对象为什么不同了?
原型链的问题啦,其实就是相当于F继承了O,F就有了O中的所有方法与属性。你可以读读大叔的博客,我最近在读... http://www.cnblogs.com/TomXu/archive/2012/01/05/2305453.html
没解决我这个问题呀。我想问的是为什么会进行了浅复制了···
@lqzerogg: 这个根本就不是什么浅复制什么的,这样的写法是原型链的继承。