簡體   English   中英

javascript構造函數未提供正確的結果

[英]javascript constructor function not giving correct result

我是JS的新手。 我試圖使用構造函數創建一個對象。 這是我的代碼

    function player(name,age,rank)
{

    this.name=name;
    this.age=age;
    this.rank=rank;
    this.sayEverything=function()
    {

        return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank; 
    }

現在我要添加一個新的屬性

player.matchReady=true;

現在我創建一個這樣的對象

var kaka=new player("kaka",22,3,false);

當我寫這個

document.write('kaka is match ready-->' + kaka.matchReady);

它給了我這個輸出卡卡已經准備好匹配->未定義

為什么給我不確定的東西? 我沒有正確添加新屬性嗎?請告訴我。 謝謝。

代替player.matchReady=true;

是的, player.prototype.matchReady = true;

這樣,所有玩家都會將比賽准備就緒默認值設置為true;

您也可能希望將函數放入原型中。

player.prototype.sayEverything=function()
    {

        return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank; 
    }

您可以將原型視為構架,概述對象在實例化時應具有的所有屬性和功能。 所有對象的所有這些默認值都相同。

當您在函數內添加函數時,所有這些函數在實例化新對象時都會在內存中重復。

盡可能在不需要范圍界定的情況下,嘗試向sayEverything()添加諸如sayEverything()通用函數(請將其重命名為toString()以符合約定)。

這樣,所有播放器對象都可以使用相同的功能。 這是更有效的內存。

您不能將屬性添加到類。 您始終可以將屬性添加為其原型。

像這樣:

function player(name, age, rank) {

     this.name = name;
     this.age = age;
     this.rank = rank;
     this.sayEverything = function () {

         return "The name of the player is " + this.name + "the age is " + this.age + "the rank is " + this.rank;
     }
 }

 player.prototype.matchReady = true;
 var kaka = new player("kaka", 22, 3, false);

 alert('kaka is match ready-->' + kaka.matchReady);

工作示例: jsfiddle

原型博客

如果將其添加到原型,則所有玩家都將擁有該字段。

player.prototype.matchReady = true;

如果只希望特定玩家擁有該字段,請將其添加到該玩家變量中:

var kaka = new player("kaka",22,3,false); 
kaka.matchReady = true;// kaka has to come first

在下面的示例中,您可以看到什么是私有,公共,靜態和特權變量或方法。每當您在方法本身上編寫屬性(如靜態變量)時,該變量將不可用於實例。

同樣,每當編寫構造函數時,都應遵循命名約定,以幫助您與其他函數區分開

/ Constructor
function Player(name) {
    // Private
    var dob= "17/04/1986";

    // Privileged
    this.getDOB = function () {
        return dob;
    };

    // Public
    this.name = name;
}

// Public
Player.prototype.getName = function () {
    return this.name;
};

// Static property
Player.town = "South Park";

暫無
暫無

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

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