这是一个探索性问题,看看核心JavaScript的东西是如何工作的。我意识到约定是不覆盖任何核心JavaScript类,但我似乎无法绕过这一个。是否有可能将实例方法添加到JavaScript中的所有“类”中?
你可以创造什么通过向核心Function
原型这样就像在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]}
实际上,你不会称它们为“类”,它们是“构造函数”。这也可以帮助你https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Object/create – Deeptechtons