如何在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);
}