如果我有一个名为format
的变量和一个名称相同的方法,我将如何调用变量和方法?
use strict;
function Time() {
this.format = 'x:y:z';
}
Time.prototype = {
format: function (format) {
}
}
答案 0 :(得分:3)
您通常不能这样做,因为方法与包含函数的属性之间的JavaScript没有区别 - 它们完全相同!您可以通过将属性分配给属性来创建方法。
在这个特殊情况中,您可以通过原型访问函数对象并将其应用于对象,但这是一个可怕的黑客。
Time.prototype.format.apply(some_time_object);
最好将方法和值存储在不同命名的属性中。
答案 1 :(得分:1)
你不能这样做。将保留的唯一属性是字符串,该函数将不存在于任何实例化对象中。
要么以不同的方式命名,方法可以是formatAs
,要么使用不带参数的函数返回格式:
function Time() {
this.currentformat = 'x:y:z';
}
Time.prototype.format = function (format) {
if (typeof format === "undefined"){
return this.currentformat;
}
// ...
}
答案 2 :(得分:0)
函数实际上是存储在JavaScript属性中的对象,因此无法实现。
当您调用instance.format()
时,解释程序会查看实例以查看它是否具有名为format
的属性。如果有,它会检查它是否为函数,如果不是则抛出错误。如果实例没有这样的属性,它会检查实例的原型并执行相同的操作,直到祖先具有format
属性或者直到它到达继承树的顶部。在您的情况下,它总是会尝试执行字符串,这将导致错误。解释器从不查看原型的format()
方法。
如果您愿意,可以将该属性重命名为formatString
或mask
。