gpt4 book ai didi

javascript - JavaScript中是否可以将实例方法添加到所有 "classes"?

转载 作者:行者123 更新时间:2023-11-29 18:31:26 25 4
gpt4 key购买 nike

这更像是一个探索性问题,了解核心 JavaScript 内容是如何工作的。我意识到惯例是不重写任何核心 JavaScript 类,但我似乎无法理解这个类。

您可以通过添加到核心 Function 原型(prototype)来在 JavaScript 中创建类似于“类方法”的东西:

Function.prototype.class_method = function() {
console.log("class method called")
}

var User;
User = (function() {
function User() {}
return User;
})();

User.class_method(); // "class method called"

我的问题是,有没有办法以类似的方式添加“实例方法”?像这样疯狂的东西,但下面的东西不起作用(或没有任何意义):

alias = Function.prototype.constructor;
Function.prototype.constructor = function() {
child = this;
child.prototype.instance_method = function() {
console.log("instance method called");
}
alias.apply(child);
}

var user = new User();
user.instance_method(); // method doesn't exist

这几乎就像您需要覆盖 Function 类的 constructor 方法并从那里访问 prototype 一样。这可能吗?

如果你像这样添加到 Object.prototype 中,它确实有效:

Object.prototype.instance_method = function() {
console.log("instance method");
}

var user = new User();
user.instance_method(); // "instance method called"

但这似乎也不对,主要是因为从 console.log({}); 更改的 node.js 控制台中看到的输出令人困惑:

console.log({});
// {};

Object.prototype.instance_method = function() {
console.log("instance method");
}

console.log({});
// {"instance_method": [Function]}

最佳答案

如果您使用的是 node.js,您应该能够使用 Object.defineProperty [MDN]并使新属性不可枚举:

Object.defineProperty(Object.prototype, 'instance_Method', {
value: function() {
console.log("instance method");
},
enumerable: false // it's already the default
});

这是在 ECMAScript5 中引入的,因此只有较新的浏览器才会支持它。

关于javascript - JavaScript中是否可以将实例方法添加到所有 "classes"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7750128/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com