// Don't break the function prototype.
// pd - https://github.com/Raynos/pd
var proto = Object.create(Function.prototype, pd({
"prop": 42
}));
var f = function() { return "is a function"; };
f.__proto__ = proto;
console.log(f.hasOwnProperty("prop")); // false
console.log(f.prop); // 42
console.log(f()); // "is a function"
.__proto__
गैर-मानक और बहिष्कृत है।मैं जावास्क्रिप्ट कार्यों का वारिस कैसे करूं?
मुझे प्रोटोटाइपिक रूप से ऑब्जेक्ट बनाने का उत्तराधिकारी कैसे प्राप्त करना चाहिए, लेकिन यह ऑब्जेक्ट एक कार्य हो रहा है।
Object.create
ऑब्जेक्ट को कोई फंक्शन नहीं देता है।
new Constructor
नहीं एक वस्तु एक समारोह देता है।
प्रेरणा: - एक क्रॉस-ब्राउज़र finherit
var finherit = function (parent, child) {
var f = function() {
parent.apply(this, arguments);
child.apply(this, arguments);
};
f.__proto__ = parent;
Object.keys(child).forEach(function _copy(key) {
f[key] = child[key];
});
return f;
};
मैं नहीं मानता कि यह संभव है, तो हम शायद करने के लिए एक प्रस्ताव पेश करने चाहिए Function.create
एस-पर चर्चा मेलिंग सूची
/*
Creates a new function whose prototype is proto.
The function body is the same as the function fbody.
The hash of propertydescriptors props is passed to defineproperties just like
Object.create does.
*/
Function.create = (function() {
var functionBody = function _getFunctionBody(f) {
return f.toString().replace(/.+\{/, "").replace(/\}$/, "");
};
var letters = "abcdefghijklmnopqrstuvwxyz".split("");
return function _create(proto, fbody, props) {
var parameters = letters.slice(0, fbody.length);
parameters.push(functionBody(fbody));
var f = Function.apply(this, parameters);
f.__proto__ = proto;
Object.defineProperties(f, props);
return f;
};
})();
में उल्लेख किया es-पर चर्चा धागा वहां मौजूद एक ईएस: स्ट्रॉमैन <|
प्रोटोटाइप ऑपरेटर जो इसके लिए अनुमति देगा।
की क्या यह <|
var f1 = function() {
console.log("do things");
};
f1.method = function() { return 42; };
var f2 = f1 <| function() {
super();
console.log("do more things");
}
console.log(f1.isPrototypeOf(f2)); // true
console.log(f2()); // do things do more things
console.log(f2.hasOwnProperty("method")); // false
console.log(f2.method()); // 42
'console.log (f.apply);' 'अपरिभाषित 'वापस आ जाएगा ... तो इस तरह से किसी भी तरह से इष्टतम नहीं है ... अभी भी एक विकल्प के बारे में सोच रहा है। –
@ फ़ेलिक्सक्लिंग मैं भूल गया कि मुझे 'फंक्शन.प्रोटोटाइप' से उत्तराधिकारी होना चाहिए – Raynos
वहां [यह सवाल] था (http://stackoverflow.com/questions/6564481/javascript-polymorphic-callable-objects) मुझे थोड़ी देर पहले सामना करना पड़ा पूछताछ का संदर्भ [इस आलेख] (http://ajaxian.com/archives/javascript-tips-for-rookies-and-gurus) जो * "पॉलिमॉर्फिक कॉल करने योग्य ऑब्जेक्ट्स" * बनाने के लिए एक पैटर्न दिखाता है। सुनिश्चित नहीं है कि आप इसके बाद क्या कर रहे हैं, लेकिन एक लायक हो सकता है। – user113716