js中的this与with关键字
js中的this与with关键字在JavaScript的对象系统中,this关键字用在两种地方:
- 在构造器函数中,指代新创建的对象实例
- 在对象的方法被调用时,指代调用该方法的对象实例
如果一个函数被作为普通函数(而不是对象方法)调用,那么在函数中的this关键字将指向window对象。与此相同的,如果this关键字不在任何函数中,那么他也指向window对象。
javascript 中this 关键字的用法:
1.<li onclick="// 可以在里面使用this">liision element</li> this 指向li
2、this 指向window对象,若要引用li对象this.event.srcElement;
<li id="elmtli">liision element</li> <script language="javascript"> var li = document.getElementById('elmtli'); li.attachEvent('onclick', EventHandler); //attachEvent把li的onclick事件和一个方法绑定 function EventHandler() { // 在此使用this } </script>
3、用DHTML方式在事件处理函数中使用this关键字:
//产生的方法同上,但此处的this 指向li
<li id="elmtli">liision element</li>
<script language="javascript">
var li = document.getElementById('elmtli');
li.onclick = function()
{
// 在此使用this
};
</script>
4、类定义中使用this关键字:
//这是JavaScript模拟类定义中对this的使用,这个和其它的OO语言中的情况非常的相识。但是这里要求成员属性和方法必须使用this关键字来引用,运行上面的程序会被告知myName未定义。
function JSClass()
{
var myName = 'jsclass';
this.m_Name = 'JSClass';
}
JSClass.prototype.ToString = function()
{
alert(myName + ', ' + this.m_Name);
};
var jc = new JSClass();
jc.ToString();
5、为脚本引擎内部对象添加原形方法中的this关键字:
//这里的this指代的是被添加原形的类的实例,和4中类定义有些相似,没有什么太特别的地方。 Function.prototype.GetName = function() { var fnName = this.toString(); fnName = fnName.substr(0, fnName.indexOf('(')); fnName = fnName.replace(/^function/, ''); return fnName.replace(/(^\\s+)|(\\s+$)/g, ''); } function foo(){} alert(foo.GetName());
with关键字
1)简要说明
with 语句可以方便地用来引用某个特定对象中已有的属性,但是不能用来给对象添加属性。要给对象创建新的属性,必须明确地引用该对象。
2)语法格式
with(object instance)
{
//代码块
}
有时候,在一个程序代码中,需要多次使用某对象的属性或方法,照以前的写法,都是通过:对象.属性或者对象.方法这样的方式来分别获得该对象的属性和方法,着实有点麻烦,学习了with语句后,可以通过类似如下的方式来实现:
with(objInstance)
{
var str = 属性1;
.....
} 去除了多次写对象名的麻烦。
3)with关键字实例:
<script language="javascript">
<!--
function News() {
this.title = "郁闻天下";
this.keywords = "郁闷";
this.source = url;
}
var ymcn=new News();
with(ymcn)
{
var str = "标题: " + title + "<br>";
str += "关键字:" + keywords + "<br>";
str += "来源:" + source;
document.write(str);
}
//-->
</script>