不确定单词'扩展方法'是否合适。我想扩展JavaScript语言,允许我在任何对象上调用.helloWorld(),它总是返回字符串' Hello World'。
我试过......
Object.prototype.helloWorld = function () {
return "Hello World";
}
...但这会导致许多其他对象类型出现问题。我一直得到jQuery错误...
Unhandled exception at line 3869, column 3 in http://workflow/Scripts/jquery-3.2.1.js
0x800a01b6 - JavaScript runtime error: Object doesn't support property or method 'splice'
是否可以扩展基类JavaScript对象,以便无论对象类型如何,都可以使用自定义方法?我看过原型文档,但不确定这是否是正确的场地。我见过jQuery extend()但这似乎是jQuery特有的。我已经看到有关扩展方法与自定义属性的讨论。我感到很困惑。
答案 0 :(得分:4)
是的,可能,你可以只使用user script来完成。
使用非标准属性和方法扩展内置JavaScript原型通常被认为是一种不好的做法,因为它通常会导致代码中出现意外行为而不期望它们。
如果您确实去过那里,可以通过使该属性不可枚举来最小化影响。这样,迭代对象属性的代码就不会从原型链中枚举属性。
Object.defineProperty(Object.prototype, 'helloWorld', {
enumerable: false,
configurable: true,
writable: true,
value: function () {
return "Hello World";
}
});
答案 1 :(得分:1)
如上所述,使用Object.defineProperty()方法作为前一个方法,Object.prototype._ definegetter _已被弃用,转而使用defineProperty方法