JS

面向对象一道面试题

Posted by weite122 on 2019-01-26

第一题

  • 要求不使用 class,完成如下需求:

  • 写出一个构造函数 Animal

    • 输入为空
    • 输出为一个新对象,该对象的共有属性为 {行动: function(){}},没有自有属性
  • 再写出一个构造函数 Human

    • Human 继承 Animal
    • 输入为一个对象,如 {name: ‘Frank’, birthday: ‘2000-10-10’}
    • 输出为一个新对象,该对象自有的属性有 name 和 birthday,共有的属性有物种(人类)、行动和使用工具
  • 在写出一个构造函数 Asian

    • Asian 继承 Human
    • 输入为一个对象,如 {city: ‘北京’, name: ‘Frank’, birthday: ‘2000-10-10’ }
    • 输出为一个新对象,改对象自有的属性有 name city 和 bitrhday,共有的属性有物种、行动和使用工具和肤色
    • 最后一个新对象是 Asian 构造出来的,Asian 继承 Human,Human 继承 Animal
    • 注意,不要使用 class 关键字,使用原型链
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
function Animal(){

}
Animal.prototype.行动 = function(){}
function Human(options){
Animal.call(this, options)//继承Animal的私有属性
this.name = options.name
this.birthday = options.birthday
}
Human.prototype = Object.create(Animal.prototype)//继承Animal的共有属性
Human.prototype.constructor = Human
Human.prototype.物种 = '人类'
Human.prototype.行动 = function(){}
Human.prototype.使用工具 = function(){}
function Asian(options){
Human.call(this, options)//继承Human的私有属性
this.city = options.city
}
Asian.prototype = Object.create(Human.prototype)//继承Human的共有属性
Asian.prototype.constructor = Asian
Asian.prototype.肤色 = '黄色'


let a = new Asian({city: '北京', name: 'Frank', birthday: '2000-10-10' })
console.log(a)

第二题

  • 要求使用 class,完成如下需求:

  • 写出一个构造函数 Animal

    • 输入为空
    • 输出为一个新对象,该对象的共有属性为 {行动: function(){}},没有自有属性
  • 再写出一个构造函数 Human

    • Human 继承 Animal
    • 输入为一个对象,如 {name: ‘Frank’, birthday: ‘2000-10-10’}
    • 输出为一个新对象,该对象自有的属性有 name、物种和 birthday,共有的属性有行动和使用工具 (由于 class 的语法问题,所以物种只能勉为其难作为一个自有属性,本来应该是共有属性的)
  • 再写出一个构造函数 Asian

    • Asian 继承 Human
    • 输入为一个对象,如 {city: ‘北京’, name: ‘Frank’, birthday: ‘2000-10-10’ }
    • 输出为一个新对象,改对象自有的属性有 name city 物种 肤色和 bitrhday,共有的属性有行动和使用工具
    • 最后一个新对象是 Asian 构造出来的,Asian 继承 Human,Human 继承 Animal
    • 注意,要使用 class 关键字
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
class Animal{
行动(){console.log('行动')}
}

class Human extends Animal{
constructor(options){
super(options)
this.name = options.name
this.birthday = options.birthday
this.物种 = '人类'
}
使用工具(){console.log('使用工具')}
}

class Asian extends Human{
constructor(options){
super(options)
this.city = options.city
}
肤色(){console.log('黄种人')}
}
let a = new Asian({city: '北京', name: 'Frank', birthday: '2000-10-10' })
console.log(a)