如果我有一个名为format
的变量和名称相同的方法,我该如何去调用变量和方法?区分属性和方法同名
use strict;
function Time() {
this.format = 'x:y:z';
}
Time.prototype = {
format: function (format) {
}
}
如果我有一个名为format
的变量和名称相同的方法,我该如何去调用变量和方法?区分属性和方法同名
use strict;
function Time() {
this.format = 'x:y:z';
}
Time.prototype = {
format: function (format) {
}
}
您通常不能做到这一点,因为有一个方法和包含的功能一个属性之间在JavaScript中没有什么区别 - 它们是完全一样的东西!您可以通过将属性分配给功能来创建方法。
在这种特殊情况下,您可以通过访问原型的函数对象,并将其应用到对象,但是这是一个可怕的黑客。
Time.prototype.format.apply(some_time_object);
您最好将方法和值存储在不同名称的属性中。
函数实际上是存储在JavaScript属性中的对象,所以这是不可能的。
当您拨打instance.format()
时,解释器会查看该实例是否具有名为format
的属性。如果存在,它将检查它是否是一个函数,如果不是,则会抛出错误。如果实例没有这样的属性,它会检查实例的原型并执行相同的操作,直到祖先拥有format
属性或直到它到达继承树的顶部。在你的情况下,它总是会尝试执行字符串,这会导致错误。解释者从来没有看过其原型的方法format()
。
如果您愿意,您可以将属性重命名为formatString
或mask
。
你不能这样做。唯一保留的属性是字符串,函数不会存在于任何实例化的对象中。
无论是不同的他们的名字,该方法可以formatAs
,或者有一个函数不带参数返回格式:
function Time() {
this.currentformat = 'x:y:z';
}
Time.prototype.format = function (format) {
if (typeof format === "undefined"){
return this.currentformat;
}
// ...
}
我喜欢getter-setter函数的思想,如果没有参数,它会得到这个值,如果有的话就设置它,但在这种情况下,我认为他的format()函数根据所述格式返回时间,所以它不能作为一个getter。 – 2015-04-03 16:32:34
@JacqueGoupil是的,它可以。为什么不? – theonlygusti 2015-04-03 16:42:50
我认为'instance.format()'应该返回'12:56:01',所以它不能返回'x:y:z'。但是我可能会误解他想要做的事情。 – 2015-04-03 16:57:33
你不能 - 他们的名字不同 – Igor 2015-04-03 16:23:20
不可能。该方法被覆盖。 – theonlygusti 2015-04-03 16:24:28
更好的问题将是你解释*为什么你需要这种行为。你当然可以*错误地编写代码,干扰自己的代码,但你为什么会这样做?代码简单写入失败。 – user1596138 2015-04-03 16:41:35