這是一個探索性問題,看看核心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