JavaSript面向对象
1 函数对象的属性
一个对象的属性可以分为静态属性和实例属性两种:
实例属性:实例对象上定义的属性(属性是定义在实例对象的内存中).
静态属性:函数本身定义的属性(属性是定义在函数对象的内存中).
示例代码:
function Student(){
this.age=18;//给实例添加了一个属性,这个属性就是实例属性.
}
var s1 = new Student();
s1.name="";//直接给实例添加的属性,也是实例属性
Student.height=;
实例:通过构造函数创建出来的对象
对于函数来说,所有函数其实都是Function构造函数的实例,包括Function函数本身,所以我决定静态属性和实例属性这两个概念是相对来说的.
2 函数对象定义的默认属性
示例代码:
function f(a,s,d,f){
console.log(f.caller);//f函数本身
}
console.log(f.name);//f函数名
console.log(f.length);//4
function f2(){
f();
console.log(f2.caller);//null
}
f2();
fn.name:函数的名称
fn.length:函数形参的个数
fn.caller:表示函数是由哪个函数调用的,如果不是在函数内部调用则输出null.
arguments:是函数内部默认的局部变量,它是主要用来存储传入函数的实参,是一个伪数组.
伪数组:不是Array构造函数创建出来的一个对象,但是它拥有一些属性,可以使用for循环进行遍历
3 函数对象默认参数arguments
示例代码:
function f1(){
console.log(arguments);
for (var i = 0; i < arguments.length; i++) {
var obj = arguments[i];
console.log(obj);
}
console.log(arguments.length);
console.log(arguments.callee);//函数本身
}
f1(1,2,3,4,5,6)
arguments对象的属性
arguments.callee:指向的就是当前函数本身
arguments.length:函数调用时传入的实参个数
arguments是默认的参数可以直接在函数内部调用,且只能被本身函数调用.
4 递归
递归的概念:函数的自调用.
递归案例:
1. 斐波那契数列:第n项=第(n-2)项+第(n-1)项
示例代码:
function fib(n){
if(n<=0) return;
if(n===1 || n===2) return 1;
return fib(n-2)+fib(n-1);
}
2. 阶乘:n的阶乘=(n-1)的阶乘*n
示例代码:
n!=1*2*...*n
function factorial(n){
if(n<0) return;
if(n===0||n===1) return 1;
return factorial(n-1)*n;
}
3. n的m次方
原理:n的m次方=n的m-1次方*n
示例代码:
function mu(n,m){
var temp=1;
if(m<0)return;
if(m===0)return 1;
for (var i = 0; i < m; i++) {
temp*=n;
}
return temp;
}
4. 判断某个DOM元素是否在指定的DOM元素下面
原理:通过查找子元素的父元素和指定DOM元素判断是否为同一个
示例代码:
function find(child,parent){
if(child.parentNode==null) return false;
if(child.parentNode===parent) return true;
return find(child.parentNode,parent);
}