最新の今日の第一条面接のテーマ(js閉包、原型、継承、役割領域)(2016)

4187 ワード

第一題:次の種類のアニマルをすでに知っています.1つのCat類を設計してアニマルから継承し、次のような機能を実現したいです.
Animal:
function Animal(){
    this.name = "Animal";
    this.showName = function(){
        console.log(this.name);
    }
}

Cat:

function Cat(){

    this.name = "Cat";

    this.showName1 = function(){
        console.log(this.name); 
    }
    
    this.showName2 = function(){
        console.log(this.name); 
    } 
 
    this.showName3 = function(){
        console.log(this.__super.name + "=>" + this.name); 
    }
}
コード実行:
// Cat部分の関連コードを改善してください.以下の結果が得られます.
……
var cat = new Cat();
console.log(cat instanceof Animal ); //   :true
cat.showName1();     //   :"Cat" (    Cat  name  ) 
cat.showName2();    //    :”Animal" (    Animal  name  ) 
cat.showName3();    //  :”Animal" => "Cat" (      Cat  name Animal  name)
答えの解析:
function Animal() {
    this.name = "Animal";
    this.showName = function() {
        console.log(this.name);
    };
}

function Cat() {

    this.name = "Cat";
    this._super = Cat.prototype;

    this.showName1 = function() {
        console.log(this.name);
    };

    this.showName2 = function() {
        console.log(this.name);
    };

    this.showName3 = function() {
        console.log(this._super.name + "=>" + this.name);
    };
}
Cat.prototype = new Animal();
var cat = new Cat();
console.log(cat instanceof Animal);   //true
cat.showName1();     //"Cat"
cat.showName2.call(Cat.prototype);   //"Animal"
cat.showName3();    //"Animal" => "Cat"
2番:
次の配列が分かりました.
var arr = [[1,2,2],[3, 4, 5, 5],[6, 7, 8, 9,[11,12,[12,13,[14]]]],10];
プログラムを作成して、配列を平準化し、一部のデータを繰り返し除いて、最終的には昇順で重複しない配列を取得します.
var res= [1,2,3,4,5,6,7,8,9,10,11,12,13,14]
答えと解析:
/**
 *     ,    ,  
 * @type Array
 */

//    
var arr = [[1, 2, 2], [3, 4, 5, 5], [6, 7, 8, 9, [11, 12, [12, 13, [14]]]], 10];
var newArray = [];
function getArray(array) {
    array.forEach(function(e) {
        if (typeof e === "object") {
            getArray(e);
        } else {
            newArray.push(e);
        }
    });
}
getArray(arr);

//  
Array.prototype.distinct = function() {
    return this.reduce(function(newArray1, newValue) {
        if (newArray1.indexOf(newValue) === -1)
            newArray1.push(newValue);
        return newArray1;
    }, []);
};
newArray = newArray.distinct();
//  
newArray.sort(function(a, b) {
    return a - b;
});
console.log(newArray);
次のテーマにはどのような問題がありますか?
var obj = {
    name: " jsCoder",
    skill: ["css3","html5", "es6", "react", "angular"],
    say: function () {      
        for(var i = 0, len = this.skill.length; i< len; i++){
            setTimeout(function(){
                console.log("No." + i + this.name);
                console.log(this.skill[i]);
                console.log('--------------------------');
            },100);
        }
    }
}
obj.say();
どのように結果を得るか、いくつかの方法が考えられます.
No.1 jsCoder
css3
--------------------------
No.2 jsCoder
html5
--------------------------
No.3 jsCoder
es6
--------------------------
No.4 jsCoder
react
--------------------------
No.5 jsCoder
angular
-------------------------- 
答えと解析:
/**
 *   this  、  
 *  
 */
var obj = {
    name: " jsCoder",
    skill: ["css3", "html5", "es6", "react", "angular"],
    say: function() {
        for (var i = 0, len = this.skill.length; i < len; i++) {
            (function() {
                var temp = i;
                setTimeout(function() {
                    console.log("No." + temp + obj.name);
                    console.log(obj.skill[temp]);
                    console.log('--------------------------');
                }, 100);
            })();
        }
    }
};
obj.say();