Javascript:Access对象';s参考变量
我不确定我问的这个问题是否正确,但如何访问对象的引用变量 比如说,Javascript:Access对象';s参考变量,javascript,html,dom,Javascript,Html,Dom,我不确定我问的这个问题是否正确,但如何访问对象的引用变量 比如说, var datagrid = new DataBaseGrid(); console.log(datagrid); DatabaseGrid.prototype.initializeGrid = function(grid) { var self = this; console.log(self); //self references same object as datagrid grid.set
var datagrid = new DataBaseGrid();
console.log(datagrid);
DatabaseGrid.prototype.initializeGrid = function(grid) {
var self = this;
console.log(self); //self references same object as datagrid
grid.setCellRenderer("action", new CellRenderer({
render: function(cell, id) {
cell.innerHTML+= "<i onclick=\""+self+".deleteRow("+id+");\" class='fa fa-trash-o' ></i>";
console.log(cell.innerHTML);
}
}));
};
相反,当单击该元素时,我得到一个错误未捕获的SyntaxError:Unexpected identifier(index):1
我之所以要这样做,是因为我还有其他DataBaseGrid对象将使用initializeGrid,我不想硬编码对它的一个对象引用 您正在尝试将对象注入字符串。字符串表示形式可能类似于
[object DatabaseGrid]
,结果是HTML:
<i onclick="[object DatabaseGrid].deleteRow(1);" class='fa fa-trash-o'></i>
您正在尝试将对象注入字符串。字符串表示形式可能类似于
[object DatabaseGrid]
,结果是HTML:
<i onclick="[object DatabaseGrid].deleteRow(1);" class='fa fa-trash-o'></i>
您正在尝试将对象引用转换为字符串。那不行。使用其他方法之一绑定事件处理程序。
既不能使用键盘也不能使用屏幕阅读器。要修复键盘,请使其成为真正的
。要修复屏幕阅读器,除了图标外,还需要一些文本内容。一种方法是使用aria标签
。正在修复这两个问题:
。您正在尝试将对象引用转换为字符串。那不行。使用其他方法之一绑定事件处理程序。
既不能使用键盘也不能使用屏幕阅读器。要修复键盘,请使其成为真正的
。要修复屏幕阅读器,除了图标外,还需要一些文本内容。一种方法是使用aria标签
。解决这两个问题:
。我可以建议使用“addEventListener”而不是指定“onclick”吗?(否则,回答很好。)@迈克尔:我想知道为什么。我过去几乎在任何地方都使用addEventListener
,但自从HTML5标准化以来,只要我只需要一个处理程序,我就可以更自如地使用*表单上的;它更简洁,适用于非常旧的浏览器(attachEvent
,有人吗?)。因为你永远不知道其他代码何时会临时添加/删除其他侦听器。@Michael:只要他们使用addEventListener
/removeEventListener
接口添加其他侦听器,onclick
将保持工作状态。我认为onclick
适合在该元素上的交互有一个明确的“所有者”时使用,我认为这种情况适用于这里。@user2684075:我可以理解这种混淆。我使用的bind
实际上不是jQuerybind
,而是。我使用它的方式有点像是function(){self.deleteRow(id);}
;它实际做的是将this
的值固定到self
和id
的第一个参数。我是否可以建议使用“addEventListener”而不是指定“onclick”?(否则,回答很好。)@迈克尔:我想知道为什么。我过去几乎在任何地方都使用addEventListener
,但自从HTML5标准化以来,只要我只需要一个处理程序,我就可以更自如地使用*
表单上的;它更简洁,适用于非常旧的浏览器(attachEvent
,有人吗?)。因为你永远不知道其他代码何时会临时添加/删除其他侦听器。@Michael:只要他们使用addEventListener
/removeEventListener
接口添加其他侦听器,onclick
将保持工作状态。我认为onclick
适合在该元素上的交互有一个明确的“所有者”时使用,我认为这种情况适用于这里。@user2684075:我可以理解这种混淆。我使用的bind
实际上不是jQuerybind
,而是。我使用它的方式有点像是function(){self.deleteRow(id);}
;它实际做的是将this
的值固定为self
,并将第一个参数固定为id
。
var i = document.createElement('i');
i.className = 'fa fa-trash-o';
i.onclick = self.deleteRow.bind(self, id);
cell.appendChild(i);