js+面向对象+递归相关笔记(一)

1.继承:
◆混入式继承: for-in
◆原型继承:利用对象的动态特性、直接替换原型的对象、利用混入的方式给原型对象添加成员
◆经典继承:使用ECMAScript5中增加的var newObj=Object.create(parentObj);


2.原型链:构造函数与与原型对象相互关联,构造函数实例化的对象可以直接调用原型对象中的方法,原型对象的构造函数也有原型对象,一层一层往上的一条相互关联的链,一直到Object对象的prototype停止。


3.Object.prototype的成员
◆constructor :构造函数
◆hasOwnProperty():判断当前对象中是否包含括号中这个属性
◆isPrototypeOf():判断当前对象是否是括号中对象的原型
◆propertyIsEnumerable():判断括号中的属性是否属于对象本身,然后再判断当前括号中的属性是否可以被遍历到。以遍历。
◆toString()与toLocaleString() 用来转换普通字符串与本地操作系统默认支持的字符串
◆valueOf() 在参与运算时会先去调用这个方法,如果调用完这个方法还是无法参与运算,则会再去调用toString()。
◆__proto__ :指向当前对象的构造函数的原型。


4.Function 与 eval
◆Function 可以用来创建函数,因为它的原型对象是匿名函数。
◆eval 可以将字符串转换为js代码并且执行。
◆无论是Function还是eval其实都可以将字符串转成js代码【
var jsonData='({"name":"zs"})';
//使用Function的方式将字符串转换为js对象
var fn=new Function("return "+jsonData);
var obj=fn();//调用函数


//使用eval的方式将字符串转换为js对象
var obj=eval(jsonData);//直接调用eval方法即可



5.arguments
◆函数内部的一个对象,在函数调用的时候,默认的会将所有传入的实际参数依次放入一个数组,是一个伪数组。
◆arguments.length:参数的个数
◆arguments.callee:指向当前的函数本身


6.instanceof关键字
◆判断一个对象是否是一个构造函数的实例
◆判断一个对象是否一个一个构造函数的后代对象
★判断该构造函数的原型是否存在于该对象的原型链上(实际上只要满足这个条件,那么就能够说明 以上两点)。


7.Object构造函数与Function构造函数
◆Object构造函数是通过Function构造函数实例化出来的。
◆Function构造函数 是通过Function构造函数实例化出来的(递归)
★由于递归的作用,Object.prototype在Function的原型链上,Function.prototype也Object原型链上【
//instanceof
        //Object.prototype是否在Function的原型链上
        //Function-->Function.prototype---->Object.prototype---->null
        console.log(Function instanceof Object); //true
        //Function.prototype是否在Functionde原型链上
        console.log(Function instanceof Function);


        //Object--->Function.prototype---->Object.prototype----->null
 //Object.prototype是否在Function的原型链上
        console.log(Object instanceof Function);
          //Object.prototype是否在Object原型链上
console.log(Object instanceof Object);





8.递归
◆在函数内调用函数自己,就是递归
◆没有递归结束条件的递归,就是死递归
◆系统在函数调用的时候会去开辟一块儿空间,所以当你死递归的调用函数就会不断的开辟空间,于是就会堆栈溢出。 
◆递归的两个要素:自己调用自己、要有结束条件。
◆化归思想:将一个问题由难化易,由繁化简,由复杂化简单的过程称为化归,它是转化和归结的简称。 








posted @ 2018-06-15 09:53  我叫贾文利  阅读(212)  评论(0编辑  收藏  举报