Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JavaScript中作为对象属性计算函数_Javascript - Fatal编程技术网

在JavaScript中作为对象属性计算函数

在JavaScript中作为对象属性计算函数,javascript,Javascript,我在JavaScript中定义一个对象文字,但当我尝试创建一个被调用函数的属性时,我得到一个未捕获引用错误:xxx未定义错误 下面是一个例子: var person = { name : 'Saucy Jack', convenienceHook : this.getName('some predefined string'), getName : function(string) { console.log(this.name + string);

我在JavaScript中定义一个对象文字,但当我尝试创建一个被调用函数的属性时,我得到一个
未捕获引用错误:xxx未定义
错误

下面是一个例子:

var person = {
    name : 'Saucy Jack',

    convenienceHook : this.getName('some predefined string'),

    getName : function(string) {
        console.log(this.name + string);
    }
};
此错误表示
未捕获引用错误:未定义便利书

如果在对象定义之外指定属性,也不起作用:

var person = {
    name : 'Saucy Jack',

    getName : function(string) {
        console.log(this.name + string);
    }
};

person.convenienceHook = person.getName('some predefined string');
person.convenienceHook(); //returns error 
我错过了什么?

这里:

var person = {
    name : 'Saucy Jack',

    convenienceHook : getname('some predefined string'),

    getName : function(string) {
        console.log(this.name + string);
    }
};
您正在调用一个不存在的名为
getname
的函数
getName
还不是
person
上的属性,因为
getName('some prefined string')
在对象存在之前必须进行求值,因为它是对象文本的一部分。即使它确实存在,您仍然无法将其称为裸
getname
,即使它存在,您也必须正确地大写
getname

第二种方法也只是调用
person.getName
。看起来您想创建另一个函数,该函数将调用
getName

var person = {
    name : 'Saucy Jack',

    convenienceHook : function() {
        return this.getName('some predefined string');
    },

    getName : function(string) {
        console.log(this.name + string);
    }
};
这应该行得通

var person = {
name: "Saucy Jack", 
convenienceHook: function() { return this.getName("Predefined text") },
getName: function(string) { 
    string=string||"";
    return this.name + string; } 
}

您分配的不是函数,例如,您需要从getName函数返回函数,因此方便书将是一个函数:

getName : function() {
    return function() {
        console.log(this.name);
    };
}

您第一次尝试失败的原因是
不是
个人
,而是您当前范围内的
。可以是全局的,也可以是其他的,如果代码在函数中。

首先,调用时未定义
getName()
,因为对象实例化未完成。在第二个实例中,
getName()
不返回任何非函数的内容(或返回
未定义的
)。这不是我得到的错误(
TypeError:this.getName不是函数
)方便书应该是什么,带有参数getName的get name函数指针不返回任何内容???福巴诺,那不行<当计算
person.getName
时,code>person
没有值。这仍然不起作用,与问题本身大致相同。@minitech在您的答案中,它起作用,除非您放置person.getName()它返回Saucy Jackundefined,我的解决方案没有问题好的,在我看来,这不是一个问题。是的,我的解决方案是有效的!!删除错误的否决票并标记为回答您的代码与OP不匹配。
convenienceHook:this.getName
not
convenienceHook:getName
。失败的原因不是
getName
不是
person
的属性,而是它不是
this
(全局范围)的属性。对不起,我发布时有一些拼写错误。我编辑了这个问题。你是说如果一个函数是正在创建的对象的一个方法,那么在对象文本定义中就没有办法将一个求值函数作为一个属性吗?@gloryoff:
这个
指的是对象文本内部与外部相同的东西。只有在函数内部,
可以更改。关于
person
不存在的解释仍然适用,无论如何–
这个
在那时永远不能引用
person
,因为
person
还没有被赋值,而将被赋值的值还不存在。@gloryoff:Right,在对象存在之前,即在创建对象时,您不能使用正在创建的对象的属性。@minitech-我没有看到“before”版本(它也不在编辑历史记录中,我想它很快就被更正了)