有一道考复制的javascript题
本文介绍了有一道考复制的javascript题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
今天朋友面试时候碰到的一道面试题,原始代码里的内容是不能改的,最终目标是输出"我有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
解决方案
简单写了写,可以参考一下:
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;
}
这篇关于有一道考复制的javascript题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文