JS学习之函数和创建对象的方法
1>函数,由事件驱动或主动调用的,可重复执行的代码块
--->函数调用形式
如下,用function直接先声明(函数),后调用,是最常见,也是最好理解的一种形式。
--->或者如下形式,var声明
--->函数带参数
--->函数带参且有返回值
2>创建对象的方式
2.1>使用Object或对象字面量创建对象
如上,应了js中常用的一句话“没有对象,就自己new一个”。
新建对象之后,就可以用 对象.属性或者 对象['属性'] 来增改对象的属性和值
或者如下方法创建,类似之前的array,简单直观
上面两种方法都存在一个问题,当我需要很多对象的时候,需要拷贝这段代码多次,有没有像python中‘类’一样的
东西,只要有类,就可以源源不断的实例化出对象? ----这里,引出构造函数模式创建对象方式,也是JS中比较
常用的一种方式。
2.2>构造函数模式创建对象
什么是 构造函数? 和 普通函数有什么区别?
其实我们之前就用过构造函数,如下,
创建数组时, var arr = new Array();
创建对象时, var stu1 = new Object();
对以上两个问题做个总结,如下
1、实际上并不存在创建构造函数的特殊语法,与普通函数唯一的区别在于调用方法。对于任意函数,
使用new操作符调用,那么它就是构造函数;不使用new操作符调用,那么它就是普通函数。
2、按照惯例,我们约定构造函数名以大写字母开头,普通函数以小写字母开头,这样有利于显性区分
二者。例如上面的new Array(),new Object()。
3、使用new操作符调用构造函数时,会经历(1)创建一个新对象;(2)将构造函数作用域赋给新对象(
使this指向该新对象);(3)执行构造函数代码;(4)返回新对象;4个阶段。
-->优化点,各自对象的属性(也就是name,age那些)是根据自身设置的,肯定是需要不同的,所以
它们需要在 new的时候单独创建(单独占用内存空间),那么方法呢?这些名称一样的方法其实 实现的
功能都是一样的(如上,都是一个弹窗效果),但是却也都占据了各自独立的内存空间,能否优化下?
对于"这类问题",能否实现跟python一样,给个接口,不同对象调同一个接口的方式?
答案是肯定,我们把这些方法放到构造函数外就行了,优化如下,
执行结果如下,一样,
现在func_out函数只占了一处内存,构造函数里面只是调用而已,实现了由多个对象‘共享’一个
函数的效果,解决了内存浪费的问题。
但是,但是,通过这种全局函数的方式解决对象内部共享的问题,终究不像是最好的方案,因为若是这类
函数太多了,我们想要将自定义对象封装的初衷便几乎无法实现了,由此,要引出一个最优的方案----
原型对象模式创建对象
2.3>原型的模式创建对象
这里只是先做个标记,后续有空再研究下该方法。