簡體   English   中英

添加帶有點和原型的方法

[英]add method with dot and with prototype

我有以下代碼

(function() {

    var sayHello;

    sayHello = (function() { 
        //add method to SayHello?
        SayHello.load = function() {
            var s = new SayHello();
            return s;
        };
        //SayHello constructor
        function SayHello() {
            this.text = "hello";
        }
        //add method to SayHello
        SayHello.prototype.print = function(selector){
            var elm = document.querySelector(selector);
            elm.innerHTML = this.text;
        };

        return SayHello;

    })();

    window.s = sayHello;

})();

我不明白為什么代碼在將函數分配給“SayHello.load”而不是“SayHello.prototype.load”時有效。 並且將函數分配給“SayHello.prototype.print”可以工作但“SayHello.print”不能。

我不明白為什么代碼在將函數分配給“SayHello.load”而不是“SayHello.prototype.load”時有效。

SayHello.loadSayHello.prototype.load因為在第一個中您將屬性添加到 SayHello 對象中,而在第二個中您將其添加到 SayHello 的原型中。

所以當你做

var obj1 = new SayHello();

在第一種情況下( SayHello.load )obj1 將沒有 load 屬性,但在第二種情況下( SayHello.prototype.load )它將有。

現在這意味着當你執行 SayHello.load 時,你基本上是在處理一個變量,它的初始化被提升到函數的頂部。 換句話說,變量SayHello已經初始化,但構造函數SayHello還沒有定義。

這就是為什么你之前不能做SayHello.prototype.load

function SayHello() 
{
    this.text = "text";  
}

但是你可以做SayHello.load因為它不涉及SayHello構造函數。

暫無
暫無

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

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