簡體   English   中英

無法訪問通過原型添加到Javascript對象的方法

[英]Can't access to methods that added via Prototype to Javascript object

我在Angular.js模塊中有此對象聲明:

    $scope.test=function(){

    };

    $scope.test.prototype.push = function(data) {
        return data;
    };

我這樣稱呼它:

var a = $scope.test.push(1);
console.error(a);

但是我得到這個錯誤:

Error: undefined is not a function (evaluating '$scope.test.push(1)')

為什么我無法訪問通過Prototype添加到對象的方法?

您似乎將函數的prototype 屬性與對象的內部原型相混淆。

書中Eloquent Javascript的相關引用:

重要的是要注意原型與構造函數的關聯方式(通過其prototype屬性)與對象具有原型的方式(可以通過Object.getPrototypeOf進行檢索)之間的區別。 構造Function.prototype的實際原型是Function.prototype因為構造函數是函數。 它的prototype 屬性將是通過它創建的實例的原型,但不是其自己的原型。

在代碼示例的上下文中,這意味着什么:

$scope.test.prototype.push = function(data) {
    return data;
};

在這里,您已經在$scope.test函數的prototype屬性中添加了一個push函數,該函數將出現在使用此測試函數作為構造函數(帶有new關鍵字)創建的對象的原型中。

但是, $scope.test仍然是一個空函數,沒有.push()方法,從而導致錯誤。 如果要向每個函數添加推入方法,則可以使用Function.prototype(請注意,Function是用於創建新函數的構造函數),但是我不確定該如何處理。

暫無
暫無

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

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