这是我能想到的最基本的JS对象示例,它说明了我的问题。
问题1。
如何引用类中的函数,以便在其他代码中我可以调用方法?这给了我一个错误。
var name1 = new Name();
name1.render();
问题2。
在线声明函数与使用var getByID = function() ...
?
示例对象:
function Name(user_id, container_id) {
this.userID = user_id;
this.containerID = container_id;
this.firstName = null;
this.lastName = null;
function getByID(userID) {
// An ajax call that takes a userID to get a name.
}
function setName() {
// An ajax call to get the name from db.
name_record = this.getByID(this.userID); ????? this returns an error that getByID is undefined.
this.firstName = name_record.firstName;
this.lastName = name_record.lastName;
}
function render() {
$(this.containerID).val(this.firstName + ' ' + this.lastName);
}
}
答案 0 :(得分:2)
你可以像在第二个问题中那样声明一个对象,它是有效的,因为函数 也是一个对象。或者其他方式:
var Name = {
render: function() {
}
}
Name.render();
function Name() {
}
Name.prototype.render = function() {
}
// or
Name.prototype = {
getByID: function() {
},
setName: function() {
}
}
var n = new Name();
所有这些snipets都是有效的对象声明。
你的第二个问题可能会回答第一个问题。声明如下函数时:
function Name() {
function render() {
}
}
var n = new Name();
就像render()
是私有方法一样。如果您在函数名称n.render()
之外调用,则会看到抛出错误,因为无法识别render
。但如果你改变这个......
function Name() {
this.render = function() {
}
}
...然后n.render()
将像render()
一样成为公共方法。有关public
和private
方法的详细信息,请参阅this和this。
现在,声明“内联”功能或将其设置为变量之间的区别在于:
function Name() {
}
你可以这样做:
var n1 = Name();
var n2 = Name();
var nn = Name(); // and so on...
但是:
var n = function Name() {
}
n()
是否有效,Name()
不会。即使var a = Name()
也会抛出异常。
Here's a good article关于这个值得阅读的主题。我希望它可以提供帮助。
答案 1 :(得分:0)
问题1: A" Class"在Javascript中只不过是一个对象。对象具有您可以访问的属性。这些属性是变量,函数或其他对象。通过声明您的功能:
function render() {
$(this.containerID).val(this.firstName + ' ' + this.lastName);
}
您正在声明函数Name()范围内的函数,但该函数不是Name的属性。它只是一种私人方法。有多种方法可以使它成为Name()的一部分,例如:
function Name(user_id, container_id) {
this.userID = user_id;
this.containerID = container_id;
this.firstName = null;
this.lastName = null;
this.render = function() {
console.log('hello world');
}
}
var name1 = new Name();
name1.render();
问题2: 没有区别。它们只是两种不同的语法,可以实现相同的结果。第二种方式(声明var并定义函数)会立即为您提供函数的引用,但这可以通过第一种方式实现。
答案 2 :(得分:0)
回答你的第一个问题:
函数getByID,setName和render是构造函数的本地函数,不能由类对象调用。你必须使用原型继承。
例如。
function Name(user_id, container_id) {
this.userID = user_id;
this.containerID = container_id;
this.firstName = null;
this.lastName = null;
}
Name.prototype = {
getByID :function(userID) {
// An ajax call that takes a userID to get a name.
}
setName:function() {
// An ajax call to get the name from db.
name_record = this.getByID(this.userID);
this.firstName = name_record.firstName;
this.lastName = name_record.lastName;
}
render:function() {
$(this.containerID).val(this.firstName + ' ' + this.lastName);
}
};
回答你的第二个问题:
以防万一 ABC(); //错误 function abc(){ }
此函数是在运行时创建的,因此您只能在声明
之后调用它但是,这个
abc();
var abc = function(){
};
是在解析时创建的,因此您可以在声明之前调用它。