猿问

有一道考复制的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


浮云间
浏览 479回答 1
1回答

牧羊人nacy

简单写了写,可以参考一下: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;}
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答