2014-01-23 26 views
0

我有一個javascript類person,我做了Obj它,工作正常。但我需要從person類訪問功能。Javascript OOP初始化和方法調用問題

當我試圖訪問我得到..not a function error

請幫忙!

重要......我需要初始化'person'類,並調用與我的代碼完全相同的方法。怎麼樣??幫幫我!

這裏是我的代碼:

var person = { 
    setBasic: function(data) { 
    alert(data.name + ' ' + data.age); 
    }, 
    this:getPerson = function() { 
    alert('get me'); 
    }, 
    success: null 
}; 

//lets instantiate.enter code here 

var perObj = new person.setBasic({ 'name': 'ikair', 'age': 33, }); 

// works fine.. 

//now I need to call a function of person class: 

perObj.getPerson(); 

//not working :(... how to call function with prev code? 
+0

我認爲變種人應該是一個功能,而不僅僅是一個對象集。然後你將這些功能添加到它的原型。 – zero298

回答

1
function person() { 
    this.setBasic = function(data) { 
    alert(data.name + ' ' + data.age); 
    }; 
    this.getPerson = function() { 
    alert('get me'); 
    }; 
} 

var perObj = new person(); 
perObj.setBasic({ name: 'ikair', age: 33 }); 
perObj.getPerson(); 

更新:

var person = { 
    setBasic: function(data) { 
    alert(data.name + ' ' + data.age); 

    this.getPerson = function() { 
     alert('get me'); 
    }; 
    } 
}; 

var perObj = new person.setBasic({ name: 'ikair', age: 33 }); 
perObj.getPersion(); 
+0

感謝伊戈爾......但正如我所說的我的要求是發起對象正是我的代碼.. var perObj = new person.setBasic({'name':'ikair','age':33,});然後調用perObj.getPerson(); ///在這裏我得到錯誤 – Ikhtiar

+0

隨着你的代碼,你分配給'perObj'一個對象,它是'persion.setBasic'函數的一個實例。它沒有一個名爲'getPerson'的方法。 – Igor

+0

然後如何更改我的代碼(人的功能/類)..所以它將有一個方法getPerson,我可以通過調用 var perObj = new person.setBasic({'name':'ikair','age': 33,}); perObj.getPerson(); – Ikhtiar

0

試試這個

var person = { 
    setBasic: function(data) { 
    alert(data.name + ' ' + data.age); 
    }, 
    getPerson: function() { 
    alert('get me'); 
    }, 
    success: null 
    }; 
    person.setBasic({ 'name': 'ikair', 'age': 33, }); 
    person.getPerson(); 
+0

注意:'this'的值在這個設置中開始變得模糊 – JoshWillik

1

你需要一個類,並給它的原型功能:

/** 
* Person class 
* @param {String} name Name of person 
* @param {Number} age Age of person 
*/ 
function person(name, age) { 
    this.name = name || ""; 
    this.age = age || 0; 
    this.success = null; 
} 
person.prototype = { 
    /** 
    * Set the parameters of this object 
    * @param {type} data 
    * @returns {undefined} 
    */ 
    setBasic: function(data) { 
     this.name = data.name; 
     this.age = data.age; 

     alert(data.name + ' ' + data.age); 
     // Do you mean to use this? 
     alert(this.name + ' ' + this.age); 
    }, 
    /** 
    * Alert out fields 
    * @returns {undefined} 
    */ 
    getPerson: function() { 
     alert(this.name + ' ' + this.age); 
     alert('get me'); 
    } 
}; 

/** 
* Make a person and print him out 
* @returns {undefined} 
*/ 
function main() { 
    var perObj = new person("bob", 33); 
    perObj.setBasic({ 
     name: "akira", 
     age: 100 
    }); 
    perObj.getPerson(); 
} 
+0

謝謝,但我必須打電話給: var perObj = new personsetBasic({名稱:「akira」, 年齡:100 }); then perObj.getPerson(); 怎麼樣? :( – Ikhtiar

+0

你是什麼意思?main()中的第一行給你一個帶有你在構造函數中傳遞的字段的對象,你可以在第一行之後停下來,我只是在第二行向你顯示你仍然可以使用一個函數來設置一個初始化的'person'的值,'perObj.getPerson()'顯示一個警告,打印'person's'name'和'age'。 – zero298

+0

對不起。但我可能不會能夠描述我的問題 1.我需要像這樣初始化一個js類: var perObj = new person.setBasic({'name':'ikair','age':33,}); // person is類, 2.然後我調用這樣的方法: perObj.getPerson(); // getPerson是一個函數。 怎麼樣? – Ikhtiar

0

其他的答案都是有效的,但你也可以調整你的代碼是這樣簡單得多:

function Person(data){ 
    this.age = data.age; 
    this.name = data.name; 
}; 

Person.prototype.getData = function(){ 
    alert(this.name + " " + this.age); 
}; 

var john = new Person({name: "John", age: 43}); 
john.getData(); 

而一個的jsfiddle來證明它的作品here

+0

thanks .. but must call like var perObj = new personsetBasic({name:「akira」,age:100});那麼perObj.getPerson();怎麼樣? :( – Ikhtiar

+0

你想要的格式代碼的方式沒有任何意義,即使我嘗試,我不認爲我可以得到該代碼運行。 – JoshWillik