今天朋友面试时候碰到的一道面试题,原始代码里的内容是不能改的,最终目标是输出"我有3个APPLE"这句话补充代码里的是我目前的答案,但是:1.A.prototype.total=3这个写法有点搓,不知道怎么优化了2.另外initialize这个方法应该如何调用呢?下面上代码 // 补充代码使得代码可以输出规定的内容 // 原始代码 start var A = function() { this.name = 'apple'; } A.prototype.getName = function() { return this.name; } // 原始代码 end //补充代码 start //浅复制对象,把参数内的方法名复制给A A.extend = function(source) { for(property in source){ this.prototype[property]=source[property]; } return this; } A.prototype.total=3; //补充代码 end //原始代码 start var B = A.extend({ initialize: function() { this.superclass.initialize.call(this); this.total = 3; }, say: function() { return '我有' + this.total + '个' + this.getName() } }); var b = new B(); //console.log(b.initialize()); console.log(b.say()); //我有3个APPLE // 原始代码 end
1 回答
牧羊人nacy
TA贡献1862条经验 获得超7个赞
简单写了写,可以参考一下:
A.extend = function(source) {
this.initialize = this;//这句实在没想起有什么好方法,不修改超类
var T = function(){};//下面两句主要使用原型式继承,避免直接new A()导致调用两次A中的代码
T.prototype = this.prototype;
var F = function(){
this.initialize();
};
F.prototype = new T();
F.prototype.superclass = this;
F.prototype.getName = function(){//覆盖超类中的getName,返回大写的
return this.name.toUpperCase();
}
for(var prop in source){
F.prototype[prop] = source[prop];
}
return F;
}
添加回答
举报
0/150
提交
取消