如何在JavaScript的构造函数中定义对象的原型?
我将创建一个对象构造函数,将对象作为其属性之一,并希望向该对象的原型添加方法 这样定义它是行不通的,因为对象是从对象文本而不是从构造函数实例化的:如何在JavaScript的构造函数中定义对象的原型?,javascript,Javascript,我将创建一个对象构造函数,将对象作为其属性之一,并希望向该对象的原型添加方法 这样定义它是行不通的,因为对象是从对象文本而不是从构造函数实例化的: function Resource (options) { this.self = this; this.options = options || {}; .. other options. ... // service object that I want to add functions to its
function Resource (options) {
this.self = this;
this.options = options || {};
.. other options. ...
// service object that I want to add functions to its prototype
this.service = {
request: new XMLHttpRequest(),
requestMethod: options.requestMethod ||'GET',
},
// using prototype actually creates an object called prototype
// as a property of the service object.
this.service.prototype = {
dataToNode: function(element, parent, data){
var toAppend = document.createElement(element);
toAppend.innerHTML = data;
return parent.appendChild(toAppend);
},
}
切中要害,像这样使用\uuuuu proto\uuuuu
是可行的,但\uuuuuu proto\uuuu
会贬值
如何在不使用的情况下添加到对象原型中?
您对\uuuu proto\uuuu
的使用完全取代了对象的原型。你确定这就是你想要的吗?为什么不制作一个单独的构造函数而不是使用对象文字语法?@CookieMonester这不是我想要的,谢谢你的澄清。我只想向原型添加功能。然后您可以执行Object.getPrototypeOf(this.service).newMethod=…
,但您将向普通对象的原型添加方法,这意味着您将添加到Object.prototype
。单独的构造函数会更安全。或者执行:this.service=Object.create({dataToNode:function(element,parent,data){…})代码>,将您传递的对象设置为返回的新对象的原型。然后将request
和requestMethod
属性放在this.service
上。我希望定义资源对象中的所有内容。有没有办法做到这一点?@agconti您可以将代码移到那里,但这太荒谬了
function Resource (options) {
this.self = this;
this.options = options || {};
.. other options. ...
// service object that I want to add functions to its prototype
this.service = {
request: new XMLHttpRequest(),
requestMethod: options.requestMethod ||'GET',
},
// using __proto__ works but its deprciated
this.service.__proto__ = {
dataToNode: function(element, parent, data){
var toAppend = document.createElement(element);
toAppend.innerHTML = data;
return parent.appendChild(toAppend);
},
}
function Service(options) {
this.request = new XMLHttpRequest();
this.requestMethod = options.requestMethod || 'GET';
}
Service.prototype.dataToNode = function(element, parent, data){
var toAppend = document.createElement(element);
toAppend.innerHTML = data;
return parent.appendChild(toAppend);
};
function Resource (options) {
this.options = options || {};
this.service = new Service(this.options);
}