面向对象高级( 随手记-4)

来源:互联网 发布:济宁网络问政平台登录 编辑:程序博客网 时间:2024/03/29 03:20
成员: 包含了对象的属性和方法
实例: 由构造函数创建出来的对象

静态成员: 与构造函数相关的成员(由构造函数访问到的成员)

实例成员: 由实例对象能够直接访问到的成员

实例成员和静态成员 是无法直接访问的
间接访问: p.constructor.test();

jQuery中的实力成员 和静态成员
$ 或 jQuery 在jQuery库中可以被看做是构造函数
$() 这个方法的返回值就是: jQuery对象(jQuery的实例对象)

each 两种方法:
$('div').each(function(){});  ===>实例成员
$.each(function(){})  ===>静态成员  $.ajax

jQuery中与dom相关的都是实例方法
只要是与dom没有必然关系的 都作为:静态方法

静态方法 each
//可以遍历数组也可以遍历对象 
$.each(function(index,value)){};  索引/值  $(value)==$(this)

最佳实践:最好的方法
将代码逻辑放到静态成员中,实例成员直接调用静态成员中的方法
这样代码就实现了一份
_________________________________________________

与函数相关的成员介绍:

name: 用来获取当前名称 string

length : 用来获取形参的个数

caller(废弃了)

作用: 表示当前函数是在哪个函数中调用的(指向了外层函数)

arguments (重要)
特点:1.只能在函数内部使用(可以把当成函数内部的局部变量);
2.每一个函数内部都有arguments属性
3.作用:用来获取实例参数列表
4.类型是 伪数组(类似数组的对象)  (不是数组,不能使用数组方法)

arguments的属性:
1. .length 作用:获取实参的个数
2. .callee 作用:获取当前函数的引用(自身 ) //自己调用自己
可能用到
(function(){arguments.callee();})()
_____________________________________________

递归的概念:
一个函数自己调用自己.这样就行成了递归

函数在被调用的时候,是需要占用内存的,占用内存多了以后,
就会导致:内存溢出

如何写递归??
1.将解决的问题转化为已经解决过的问题上去 //化归思想
2.找到临界条件让函数停止调用 //找到停止的条件

创建伪数组:
1.具有length属性
2.可以通过索引号 来访问 伪数组中的元素
var obj={}
obj[0]='xm'
obj.length=1

jquery 对象本质上就是一个:伪数组
____________________________________________

作用域:

变量起作用的区域(范围)

作用域分为两种:
1.块级作用域(js不支持)
一个代码块能够形成一个独立的作用域
ES6中提供了一个 :let关键字 

2.词法作用域(函数作用域)
又称为:函数作用域 (在js中只有函数能够形成一个独立的作用域)
一个变量在声明的时候,变量的作用域范围就已经定下来了(不会发生
改变)  与 运行时 无关

变量的作用域只跟声明的位置有关,在什么(位置)时候使用没有关系

作用域思路:
1.只看函数是在哪个环境中创建的,而不管函数是在哪个环境中调用的
2.不管函数是在哪个环境中调用的,最终都要回到他创建的环境中执行

分析作用域面试题的思路:
1.先提升
2.在分析

JavaScript代码执行过程
1.预解析(变量或函数提升)
2.一行一行的执行代码

对于变量来说,提升的是:声明
对于函数来说,提升的是:函数体

函数表达式与函数声明的区别
function fn(){}  //函数声明   提升的是函数体 
var fn = function(){}  //函数表达式   提升的是函数名
不同点:
1.提升机制不一样;
2.表达式中 func 后面 可以省略函数名,如果有名字只能在函数内部使用

函数声明:  (规范)
1.只能出现在全局环境中
2.在其他函数中

如果 要在代码块中使用函数,推荐使用函数表达式

首先在当前作用域中查找变量
并且变量查找的时候,查找的是变量声明

声明的全局变量,相当于window 的属性

作用域链:函数有自己的作用域,如果函数是被包裹的,包裹他的也有
作用域

变量的搜索 就是沿着作用域链进行搜索的

笔记连载中 ,  温故而知新!吐舌头
0 0