最新の今日の第一条面接のテーマ(js閉包、原型、継承、役割領域)(2016)
4187 ワード
第一題:次の種類のアニマルをすでに知っています.1つのCat類を設計してアニマルから継承し、次のような機能を実現したいです.
// 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();