Javascript中object.property Name和object [“property Name”]之间的区别[重复]
Posted
技术标签:
【中文标题】Javascript中object.property Name和object [“property Name”]之间的区别[重复]【英文标题】:Different between object.propertyName and object["propertyName"] in Javascript [duplicate] 【发布时间】:2012-01-31 07:13:15 【问题描述】:最近在“javascript the Good Parts”学习Js,据我了解
Object.propertyName
产生与Object["propertyName"]
相同的结果(如果我不正确,请纠正我并描述两者的区别)。
我正在尝试扩充 Function.prototype 以使 方法 可用于所有函数,如下所示:
Function.prototype.method = function (name, func)
this.prototype[name]= func;
;
它工作正常。但是,当我用this.prototype.name
替换this.prototype[name]
时,它会按预期运行失败!
这就是我测试它的方式:
Number.method("myRoundFunction", function ()
return Math[this < 0 ? "ceil" : "floor"](this);
);
console.log((-10 / 3).myRoundFunction());
这显示了使用this.prototype[name]
时的预期值(-3),但是
(-3.3333333333333335).myRoundFunction 不是函数
关于将其更改为this.prototype.name
有人能解释一下为什么会这样吗?
提前感谢您的帮助。
【问题讨论】:
【参考方案1】:发生的事情是name
是一个变量,不能直接与点符号一起使用。为了更好地说明这个问题,假设您为名称传递了一个值"newMethod"
。现在当你这样做时:
this.prototype[name] = func;
...相当于写:
this.prototype["newMethod"] = func;
但是当你这样做时:
this.prototype.name = func;
...您分配给对象的name
属性,而不是newMethod
属性。你在参数name
下传递的变量在上面的语句中根本没有被引用。
执行您期望的分配的语法是:
this.prototype.newMethod = func;
但是您不能使用点符号和name
变量来表达这一点(可能通过作弊和使用字符串连接和eval()
除外)。在这种情况下,您必须改用数组下标表示法。
【讨论】:
【参考方案2】:Prototype 定义了 JS 类的定义;而像 Number.parse 这样的东西是类型上的直接函数(类似于静态方法)。如果我这样做:
myclass.prototype["name"] = function()
我正在为该类的下一个实例添加一个方法,而:
myclass["name"] = function()
将函数直接添加到类对象,而不是 myclass 的下一个实例。我认为当我看到Number.method
的定义时发生了什么?
还是我错过了什么?
【讨论】:
【参考方案3】:name
是一个变量,当你使用this.prototype.name
时,它和你调用this.prototype["name"]
一样,而不是你想象的this.prototype[name]
。
【讨论】:
以上是关于Javascript中object.property Name和object [“property Name”]之间的区别[重复]的主要内容,如果未能解决你的问题,请参考以下文章
javascript - 使用另一个函数中的变量 javascript - '今天未在对象中定义'