可以使用“;创建“;作为JavaScript对象文字中的属性名称
Is it okay to use "create" as a property name in a JavaScript object literal?
我刚刚注意到IDEA/JSHint告诉我,一个包含名为"create"的属性的对象文字覆盖了object中的一个方法。
字面意思是:
module.exports = {email:{create:"me@me.com"}};
而且(显然?)Object有一个在EcmaScript5.js 中定义的创建方法
/**
@param {Object} proto
@param {Object} [props]
@static
@return {Object}
*/
Object.create = function(proto,props) {};
这是不是会导致一个模糊的问题?我猜这个保留方法不适用于文字,或者没有用默认构造函数实例化的对象。只是好奇。
现有的答案是正确的,但缺少一些重要的细节。您所做的一切都很好,不会在任何JavaScript环境中导致错误。
被多次提及的Object.create
方法是static,这意味着它是Object
构造函数本身的一个属性,而不是它的原型。你没有覆盖它,甚至没有遮蔽它。它仍然可以访问:
var obj = { create: 'something' };
console.log(obj.create); // 'something'
console.log(Object.create); // function create() { [native code] }
我不知道为什么JSHint或任何其他静态分析工具会警告不要使用create
作为属性标识符,除非可能是因为它可能会引起一些潜在的混淆。
即使您担心create
在JavaScript中是一个保留字也不是问题,因为现代JavaScript环境允许使用保留字作为属性标识符,而create
一开始就不是保留字:
var obj = {
default: 1 // Reserved word as identifier
};
总之,您可以安全地忽略警告,也不用担心代码可能产生的任何潜在副作用。
它不是保留的,但它在Object
对象上使用(已定义)。
由于文字对象也变成了对象,因此自定义create()方法将覆盖现有的方法。
只需为您的方法使用不同的名称。
它不是保留的,它是一个有效的标识符,但正如您所说,您正在重写文本上的Object create方法。只有当您尝试在文字上使用create时,它才会产生影响。
myModule.email.create(); // Will fail
myModule.email.create; // "me@me.com"
这样,当您在JavaScript中(在浏览器中)创建全局变量或方法时,它们就会成为窗口对象的属性。
如果你有充分的理由,引入甚至更改方法定义是完全可以的。当然,如果你更改方法行为,也会出现问题。这里有一个例子——我重写了window的open方法。
<html lang="en">
<head>
<script>
function windowOpen() {
window.open("http://www.google.com")
}
function windoOpenChange() {
window.open = function () {
alert("I won't open the window!");
};
}
</script>
</head>
<body>
<button value="open window" onClick="windowOpen()">Go to Google</button>
<button value="open window" onClick="windoOpenChange()">Change the behavior of window open</button>
</body>
</html>
这是在FF中测试的。所以第一次点击会打开一个新窗口,然后当你点击第二个按钮时,window.open的行为就会改变。现在,当您再次单击第一个按钮时,它将不再打开新窗口。因此,是的,如果这不是你想要做的,这可能被视为一种不可取的副作用
能够从其他对象引入新方法的能力称为Mixin。当然,基于您的mixin逻辑,任何mixin都可能遇到冲突,而不仅仅是内置对象。
您正在使用的工具警告您不要对方法进行潜在的隐藏(不需要的覆盖)。
- 如何在只接受字符串值/文字的HTML属性中调用函数
- 可以使用“;创建“;作为JavaScript对象文字中的属性名称
- 为什么可以'我们在函数体中为函数对象添加属性,就像在javascript中为对象文字添加属性一样
- 错误:JSON分析错误:使用角度转换时,属性名称必须是字符串文字
- 从C#中获取JS中对象文字的属性
- 在IE 7中,如果链接是使用jQuery创建的,如何获取链接的href属性的文字值
- 自执行函数作为对象文字的属性
- 是否可以在 javascript 中的对象文字上定义函数属性
- 如何重现正确的JavaScript对象文字属性,该属性是CoffeeScript中的匿名函数
- 在 javascript 中指定对象文字内属性的不同方法
- 将文字对象转换为对象'的属性
- 如何在不位于javascript函数内部的情况下使用对象文字的属性
- 如何从另一个属性访问对象文字属性
- 对象文字属性值与“this”不兼容
- 如何将函数参数值连接到对象文字属性名称中
- 创建函数的函数属性,而函数属性又是对象文字的方法
- 对象文字调用默认属性
- 以 JavaScript 对象文字表示法设置函数的属性
- 严格模式下不允许对象文字中重复的数据属性
- 如何根据其他属性计算对象文字中的对象属性