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);

}

原文地址:https://www.cnblogs.com/chendu/p/5914156.html