标签:
这篇内容也是之前讲到过的,纯属无聊,莫要见怪。~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~~(~ ̄▽ ̄)~
正如上文所说,如果所有的prototype属性都指向了一个相同的对象,父级对象就会受到子级对象的影响,这不是我们想要的一种结果。
要解决这个问题,我们就要给她们找个第三者了,来破坏她们之间这种暧昧的关系,那么我们可以利用一个空函数F(),并将她的原型设置为我们的父级构造函数,然后我们可以new F()来创建不包含父级对象属性的对象,也就是说父级的属性我这里是不能再设置的,同时又可以继承父对象的一切属性了。虽然有点绕,看个小例子理解一下:
function her(){}; her.prototype.name = ‘Anna‘; her.prototype.toString = function(){ return this.name; }
function his(){}; var F = function(){}; F.prototype = her.prototype; his.prototype = new F(); his.prototype.constructor = his; his.prototype.name = ‘Jock‘; his.prototype.sex = ‘men‘;
function child(width, height){ this.width = width; this.hieght = height; } var F = function(){} F.prototype = his.prototype; child.prototype = new F(); child.prototype.constructor = child; child.prototype.name = ‘Alen‘;
通过这种方法,我们就可以保持住原型链,(有时候两个人还是之间还是需要个第三者来调剂一下生活的,不然会不会很无趣?)
my._proto_ === child.prototype; // true my._proto_.constructor === child; // true my._proto_._proto_ === his.prototype; // true my._proto_._proto_._proto_.constructor === her; // true
并且父对象的属性不会被子对象的属性所覆盖。
标签:
原文地址:http://www.cnblogs.com/beyond-succeed/p/5828008.html