对应于智能社26课。
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>无标题文档</title> <script> var a = [23,'we',153]; a.show = function(){ alert('we'); } a.show(); console.log("a.show 1_-:"+a.show);/* a.show 1_-:function (){ alert('we'); } */ console.log("a.show 2_-:"+typeof a.show); // a.show 2_-:function console.log("a.show 3_-:"+typeof a.show());// a.show 3_-:undefined </script> </head> <body> </body> </html>
1.一个对象如果有某个方法属性,那上面的代码作为例子,如果要调用这个的话,直接a.show()这种方式就可以。
2.如果要看这个属性,则只要通过a.show的方式,而不需要加"()";
通过这小段程序的调试,我们可以知道,
1.一个对象(指的变量a)的属性或者方法属性,我们访问的时候都是通过a.属性的方式,如a.m,a.show。
2.a.show和a.show()的含义是不同的,前者是访问属性,如就和a.m = "wer"一样,
a.show = function(){alert('we');} ,而a.show()的含义是执行show这个
方法属性里的方法的具体代码,这个例子中就是直接在页面上弹出‘we'字样,因此如果想通过下面这种方 式console.log('a.show():'+a.show())
来查看a.show()到底是什么,那么得到的结果就是 undefined。我个人的理解是这样的,
console.log('a.show:'+a.show()) ,首先会执行a.show(),即前面讲的执行这个show这个方法属性里的具体方法,即弹出'we',然后执行console.log()代码,这个时候浏览器会认为a.show()是访问点“.”后面的属性即show()这个属性,而通过右上角的调试栏里的代码显示,对象a只有show这个属性,而没有show()这个属性,因此会返回值是undefined。
总结:a.show()作为单独的一行代码,浏览器则直接执行function show(),而a.show()本身作为其他代码中的一段的时候,那么会先执行function show(),然后访问把show()当作一个属性来访问。