簡體   English   中英

如何在JavaScript中的構造函數中定義對象的原型?

[英]How to define the prototype of an object in a constructor in JavaScript?

我要創建一個對象構造函數,其中一個對象作為其屬性之一,並且希望將方法添加到該對象的原型中。

像這樣定義它不起作用,因為對象是從對象文字實例化而不是從構造函數實例化:

 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);
        },
} 

__proto__追逐並使用__proto__就像這樣有效,但是__proto__是折舊的。

如何在不使用__proto__情況下添加對象原型?

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);
} 

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM