对象 - 介绍

  • 作者:KK

  • 发表日期:2016.2.19


在程序里经常要操作对象,不单止JS语言,几乎其它编程流行的语言都是要操作对象的

对象是什么呢...我喜欢用现实来打比方,我们买票,就要找售票员,给钱她,她给票来,那么售票员就是我们的对象,我们也是她的对象(售票对象)

很多事情并不是你自己一个人能做出来的,需要别人来协助处理,协助你处理这件事的这个人就是对象了(警察/保安是我们的安全对象,猫狗是我们的宠物对象,汽车是我们的交通工具对象...)

在程序世界里做很多事情也不是自己这块代码能做出来的,需要拜托其它程序对象来帮我们实现,所以要用到对象

比如我们想要知道浏览器窗口目前的大小是多少像素,需要通过window对象来帮我们获取这个窗口大小,看代码:

alert('当前窗口宽度是' + window.innerWidth + '像素');
alert('当前窗口高度是' + window.innerHeight + '像素');

以上代码通过访问window.innerWidthwindow.innerHeight取得了浏览器窗口的宽高度像素,你可以试着将浏览器窗口缩小一下再执行代码,它显示的数值也会跟着变呢

window是一个对象,它代表了浏览器网页窗口,这个对象在网页加载时,JS引擎就已经帮你放在内存里了,你随时随地在任何代码位置都可以访问这个对象


属性

而window后面加一个.号,.号后面再书写的innerWidth就是这个对象的属性,一般情况下对象都会有属性,还有另一种东西叫方法(下面再说)

innerWidth是window对象的宽度属性,也就是窗口的宽度,单位是像素,而innerHeight则是高度属性

另外其实window对象还有很多很多我都数不清的属性,这个你以后再慢慢了解,反正常用的不会很多


方法

对象一般有属性也有方法,方法可以理解成一种命令,严格地说方法其实本质上是一种函数,方法是可以用来做事情的,而属性是不能做事情的

你执行var aa = window.innerWidth;这个语句,将属性值赋值给一个变量,则程序的引擎在运行时只会取出窗口的宽度值传给变量aa,然后就不会有其它事情发生了

但是方法不同,方法主要是用来被调用的(和函数一样,也是定义好函数后等待人家调用的),一旦调用方法就会发生一些事情,对象会有很多个方法,每个方法都有不同的名称,如果是你自己设计的对象,方法名也可以你自己来设计(起名规则和函数一样)

比如window对象有个stop方法,那么要调用方法就需要这么写:window.stop(),和访问属性一样,也是在对象后面加一个.号,再写方法名称,但不同的是方法名称后面要加一对括号()

其实和调用函数是一样的,方法也可以有参数,要将参数传给方法就是window.test(111)这样将参数传进去


window对象也有数不清的方法,我这里只举例两个方法

  • open方法

    这个方法可以打开一个新的浏览器窗口并加载一个指定的网址

    window.open('http://www.kkh86.com/it/index.html');
    
  • stop方法

    这个方法可以禁止浏览器渲染网页

    <!DOCTYPE HTML>
    <html lang="en-US">
    <head>
    <meta charset="UTF-8">
    <title>方法测试</title>
    </head>
    <body>
    	<p>第1行内容</p>
    	<script type="text/javascript">
    	window.stop(); //上面显示了第1行内容,但在这里嵌入了一个脚本标签并执行了 window的stop 方法,会导致浏览器终止内容的渲染,下面第2行内容不会出现
    	//除非你取消stop方法的执行
    	</script>
    	<p>第2行内容</p>
    </body>
    </html>
    

方法与函数

方法与函数看上去是一样的,都是被调用,都可以传递参数,没错,你可以理解为一模一样的

但是它们还是两种概念来的,函数不属于任何对象,但方法是有对象依归的

比如location.reload()这个代码执行了location对象的reload方法,导致网页重新加载(通常讲的刷新),那么这个reload方法是属于location对象的

然而如果只是reload()这样,这个reload并不是方法执行,而是一个函数执行,但是通常有一部分程序员并不严谨地看待这些概念,都统一叫做函数

比如对着window.stop()这个代码说"执行了window的stop函数",但实际上做了5年以上的程序员一般都不再这么模糊地全部叫做函数,不然你会显得很不专业,这么多经验了还搞不懂谁是方法谁是函数么?

咱们从小就要养成好习惯,最简单,有点号调用的就是方法,没点号的就是函数,不然没准哪个面试官会觉得你都没学好理论概念给扣印象分了


最后还要告诉你,对象也是一种变量类型,alert(typeof(window))就会提示object,对象的变量类型英文名称是object