1.对象
- 对象的定义 : 对象 是 由
键值对
组成的无序
集合。 -
创建对象两种方法 :
方法一 : 字面量方法
var obj = {name: "k"};
方法二 : new Object( ) 构造函数创建
var a = new Object(); a.name = "zm"; console.log( a ); // {name: "zm"}
2.面向对象和面向过程的比较
如果 想要把大象放进冰箱。
1.面向过程思想的逻辑思维是:
1.打开冰箱2.把大象放入冰箱3.关上冰箱
解析: 面向过程思想的逻辑思维是,我们先做什么,然后做什么,最后做什么。是分步骤一步一步往下走。
疑问:
?️也许有许多小伙伴觉得,面向过程很符合我们的思维逻辑啊。的确如此,但是面向过程的缺点是扩展性和复用性很差。如果我们想要:
把狮子放入冰箱
。 1.打开冰箱2.拿出大象2.把狮子放入冰箱3.关上冰箱
把老虎放入冰箱
。
1.打开冰箱2.拿出狮子2.把老虎放入冰箱3.关上冰箱
2.面向对象思想的逻辑思维是:
冰箱: 打开 关上 清空 动物: 进入
3.批量创建对象
1.通过调用函数创建对象。
解析: say 方法,每次调用函数都会生成一个新的对象,会生成新的say( )方法。所以,每次调用createObj( name,age ); ,都会生成新的say( )方法,但是每个say方法的功能都一样,这样对性能有影响。
2.通过调用函数创建对象,性能优化。
3.函数的比较
var fn1 = function(){ alert(1); }; var fn2 = function(){ alert(1); }; console.log( fn1 === fn2 ); // false//--------------------------------------------------- var temp = function(){alert(2)}; var fn3 = temp; var fn4 = temp; console.log( fn3 === fn4 );// true
解释:无论如何定义一个函数,JS解释器都会把它翻译成一个Function对象
。所以每次创建一个自定义函数,都会创建一个新的对象。例如:fn1和 fn2变量都是存储对象的地址,虽然创建新对象的内容是一样的,但是在浏览器解析的时候,它会给对象创建一个地址。fn1和fn2存储的地址不相等,故fn1和fn2不相等。
fn3存储是temp接受的对象的地址,fn4存储也是temp接受的对象的地址。故fn3和fn4不相等。
4.构造函数
情况一:没有返回值,打印的是undefined。
解析:当函数没有返回值的时候,将函数调用赋给变量,打印的值是undefined。因为没有返回值。
情况二:使用 new 来调用函数,没有返回值,打印的是{}(空对象)。
使用 new 来调用函数 函数内部会自动return 一个对象 如果函数内部使用了 return X 如果 X 是一个 非null 的 对象res 那么通过new 调用 ,返回的是 res 如果 X 是 非对象 或者 null 那么通过new 调用 ,返回的是 {}
举例说明:
进一步对情况二说明:使用 new 来调用函数的过程
使用 new 来调用函数
第一步:函数内部会自动
为我们创建一个对象
第二步:函数内部的 this
指向会变为 当前构造函数生成的对象
第三步:会自动return
。 5.通过构造函数批量创建对象
约定: 构造函数的大驼峰写法
6.prototype 原型
prototype (原型):当一个函数被申明的时候,该函数下默认有一个属性:prototype,该属性的值是一个对象。
结果为:
当我们去调用一个对象的属性或者方法的时候,
没有该属性或方法
,则会调用到该对象 的 构造函数的prototype的属性或方法
。 把通过构造函数构造出来的对象,共有的方法或者属性,放在prototype身上,能够达到性能节约的办法。
7.__proto__
__proto__ 当一个对象被创建的时候,该对象会自动被添加上一个属性:__proto__,他的值也是一个对象,并且该属性 就是 当前这个对象的构造函数的prototype 对象.__proto__ === 构造函数.prototype
8.选项卡(用面向对象的思想写一遍)
Title