function cat() {
this.getMyID = function() { alert(this.id); } ;
}
var bob = new cat();
// I want it to say 'bob'
bob.getMyID();
http://jsfiddle.net/n7eHj/
alerts undefined, any ideas?
I'll elaborate, this is what I want to do - insert into an onclick method of a button something that calls another function, eg:
function cat() {
this.render = function() { $('#myButton').attr('onclick', 'this.meow()'); };
}
var bob = new cat();
开发者_如何学Pythonbob.render();
However this will fail because 'this.meow' is nonsense. If I knew the ID, ie. bob, then I could change it to do .attr('onclick', theID + '.meow()'); };
Regarding your update:
Assuming cat
has a method meow
, you should do the following:
function Cat() {
var that = this;
this.render = function() {
$('#myButton').click(function() {
that.meow();
});
};
}
// assuming it exists something like
Cat.prototype.meow = function() {/*...*/};
You already have a reference to the object (this
), you don't need to know in which variable it is stored.
You should also use jQuery's click
function to assign a click handler. But be careful though as this would add a new click handler every time you call render()
.
Generic "objects" don't have IDs - they don't know what variables are bound to them.
Furthermore you could have said:
var bob = new cat();
var alice = bob;
at which point you have a schizophrenic cat.
It alerts undefined
because cat doesn't have an "id" property. No sure how you expected it to have an id.
I will try...
I'll elaborate, this is what I want to do - insert into an onclick method of a button something that calls another function,
Here is some code... is it close?
var bobthefunction = function () {
// do crazy stuff
}
$("buttonname").attr("onclick",bobthefunction);
or
$("buttonname").click(bobthefunction);
What you can do is use closures:
function cat() {
this.render = function()
{
$('#myButton').click(function(self )
{
return function() { self.meow() }
}(this));
}
}
By the way, it's not recommended to attach event handlers using .attr - it simply doesn't always work in all browsers/cases. You better use .bind or an even shortcut like .click
精彩评论