最近遇到了一个问题,简单地代码如下
function Mp3() {
this.songList = [
{
songName: 'ProblemsProblems',
singer: 'Frankie'
}
]
}
Mp3.prototype = {
songManger: {
add: function (obj) {
this.songList.push(obj);
}
}
};
var mp3=new Mp3();
mp3.songManger.add({songName:'',singer:''});
困扰我的是,构造函数的原型被替换之后,原型里面有一个属性,这个属性指向一个对象,而这个对象中又有一些方法,在这个代码里面指的add方法。
add方法内使用this获得的是它所存在的对象,也就是songManger,那么问题来了,我如何在add里面获得Mp3的原型(也就是add的爹的爹)?总不能用两次this吧?
因为最后实例化的对象调用的是songManger对象,然后songManger再调用的add放,这样是没办法获取到对象本身的属性(songList)的。
http://www.jb51.net/article/61326.htm
this是songManger这个json对象,根本不是类的实例对象,干嘛要放里面去。。
你要弄Mp3.prototype.songManger.songList指向mp3的songList,由于对象,地址引用,可以直接修改。不过建议你自己搞清楚js的继承来先,不要乱搞一通
function Mp3() {
Mp3.prototype.songManger.songList= this.songList = [
{
songName: 'ProblemsProblems',
singer: 'Frankie'
}
]
}