prototype 和class的使用

129 阅读1分钟

请不要使用 class,写一个 Person 构造函数,要求以下代码运行通过:

function Person(你来补全代码){
    你来补全代码
}

let person = new Person('frank', 18)
person.name === 'frank' // true
person.age === 18 // true
person.sayHi() // 打印出「你好,我叫 frank」

let person2 = new Person('jack', 19)
person2.name === 'jack' // true
person2.age === 19 // true
person2.sayHi() // 打印出「你好,我叫 jack」

回答如下

function Person(name,age){
    this.name =name 
    this.age =age 
}

Person.prototype.sayHi = function(){console.log('你好,我叫' + this.name)}

请用 class 再实现一次上面的功能:

class Person{
constructor(name,age){
this.name =name
this.age =age 
}
sayHi(){
console.log('你好,我叫' + this.name)
}
}

this用法

第一种
let person ={
   name:'frank',
   sayHi(){
    console.log(`你好,我叫` +this.name)
 }
}

person.sayHi()//你好,我叫frank

第二种
let person ={
   name:'frank',
   age:'18',
   sayHi(){
    console.log(`你好,我叫` +this.name + `,今年` + this.age +`岁`)
 }
}

person.sayHi()
//你好,我叫frank,今年18岁

第三种
let person ={
   name:'frank',
   age:'18',
   sayHi(){
   console.log(`你好,我叫` +this.name + `,今年` + this.age +`岁`)
 }
}

person.sayHi.call({name:'jack',age:19 })
//你好,我叫jack,今年19岁

person.sayHi.call(person)=== person.sayHi()
//推荐用前一种

每个函数都可以用this获取一个未知对象的引用