无法返回对象方法名称

时间:2017-04-05 09:02:51

标签: javascript

我试图获取deliciouslove方法的名称,然后将其放在数组quotes中。我需要这样做,因为引号将显示在选择框中。我尝试使用Function.name。它适用于Say,但当我在deliciouslove上使用它时,我会得到空字符串。

这里有什么问题?

console.log('>>START')

function Say(name) {
    this.name = name
}

function Food(name) {
    this.name = name
}

Say.delicious = function(food) {
    if (!food) food = 'food'
    console.log('This '+food+' is delicious')
}
Say.love = function(food) {
    if (!food) food = 'food'
    console.log('I love '+food)
}

var pizza = new Food('Pizza')
var donut = new Food('Donut')
var quotes = [Say.delicious.name, Say.love.name]

Say.delicious(donut.name) // This Donut is delicious
Say.love(pizza.name) // I love Pizza
console.log(quotes) // ["",""]
console.log(Say.name) // Say

1 个答案:

答案 0 :(得分:0)

这是因为函数delicious实际上是一个匿名函数,如果我理解正确,则引用Say.delicious

你可以通过如下指定它来使它成为命名函数:

Say.delicious = function delicious(food) {
    if (!food) food = 'food'
    console.log('This '+food+' is delicious')
}

console.log('>>START')

function Say(name) {
    this.name = name
}

function Food(name) {
    this.name = name
}

Say.delicious = function delicious(food) {
    if (!food) food = 'food'
    console.log('This '+food+' is delicious')
}
Say.love = function love(food) {
    if (!food) food = 'food'
    console.log('I love '+food)
}

var pizza = new Food('Pizza')
var donut = new Food('Donut')
var quotes = [Say.delicious.name, Say.love.name]

Say.delicious(donut.name) // This Donut is delicious
Say.love(pizza.name) // I love Pizza
console.log(quotes) // ["",""]
console.log(Say.name) // Say