簡體   English   中英

對象文字可重用函數

[英]Object literal reusable function

請查看以下代碼以獲取更多信息。

var person = {
    firstname:"john",
    lastname:"doe",
    greet: function(){
        return "hello " + this.firstname + " " + this.lastname; 
    }
}

console.log(person.greet());

如何使上面的對象文字函數greet() dymanic? 就像我可以通過params值例如person.greet('jessie','jay')將返回hello jessie jay

使用構造函數方法(實例)以使函數動態化和可重用是否更好? 我發現object literal只是用來組織代碼。

我建議你使用Constructor函數。 此模式稱為工廠模式 此處的函數充當類,並且可以為每個人創建新對象。

function Person(firstname, lastname) {
    this.firstname = firstname;
    this.lastname = lastname;
}

Person.prototype.greet = function () {
    return 'Hello ' + this.firstname + ' ' + this.lastname;
};

var jon = new Person('Jon', 'Skeet');
var tushar = new Person('Tushar', 'Jadhav');

console.log(jon.greet()); // Hello Jon Skeet
console.log(tushar.greet()); // Hello Tushar Jadhav

首先,你應該考慮實際上或應該是什么person greet 如果person是一個對象並且greet一個對該對象的數據進行操作的方法,那么你寫person方式就沒問題了。

如果您認為person是某種命名空間或模塊,您將用它來組織您的代碼,您將把greet寫成一個純函數,它不依賴於並修改其范圍之外的任何變量。 在這種情況下,你會不會有人員實例數據作為名字和姓氏的person

var person = {
    greet: function(person){
        return "hello " + person.firstName+ " " + person.lastName; 
    }
};  

var jenny = { firstName : 'Jennifer', lastName : 'IdowntKnow' };
person.greet(jenny);

在這種情況下,兩者的結合將非常混亂

var person = {
    firstname:"john",
    lastname:"doe",
    greet: function(firstName, lastName){
        /* .. */
    }
};

person.greet('Jennifer', 'IdowntKnow');  
// hmm, what happens here? Person switched to Jennifer now? What about john? weird code...

您是否應該使用構造函數的問題更多的是關於性能還是需要原型繼承等功能。

greet: function(fname, lname){
    return "hello " +fname + " " + lname; 
}

如果您還想更新名字和姓氏

greet: function(fname, lname){
    this.firstname =fname;
    this.latname =lname;
    return "hello " +fname + " " + lname; 
}

暫無
暫無

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

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