面向对象
面向对象
- 构造函数里的属性怎么看?看this,谁前面有this谁就是属性
num 不是属性,是私有作用域下的私有变量。
- 如何查找面向对象中的this。
- 构造函数里的this执行实例对象
- 如果是方法中的this
(1) 找到this 在调用方法时看方法前面的“.”是谁,this就是谁
(2) 替换this 将this换成你找到的那个结果
(3) 精确查找 用原型链查找模式去分析
3.关于构造函数的返回值问题
构造函数也是函数,每个函数都有返回值,构造函数返回的是this。
上面的这种可以通过.来实现的多个方法 我们把他叫做链式写法。
实现原理:每个方法使用完毕之后,不仅可以得到想要的结果,还需要把当前实例对象返回,才可以实现链式写法。
4.对象分析
以后我们使用内置方法,出现内置方法报错
- 方法名写错。
- 内置方法的归属出错。
- 原型的批量添加和直接对象添加的区别
如果是批量添加属性,没有改变原型的内存地址(浏览器开辟的)
如果是以对象形式添加,就会更改原型的内存地址,浏览器开辟的就被销毁了。
6.怎样给内置对象添加方法
如果给内置类的原型添加方法,使用对象形式添加,不起作用。
Array.prototype={sun:function...} xxx 错的 浏览器会保护内置对象的原型内存地址,不让人为修改,只能使用批量的形式添加方法
Array.prototype.sun=function...
腾讯18年春招面试题
Jk.age++ 等价于 jk.age=jk.age+1 先通过jk.age查找私有的age属性,没有,再找公有的age属性,有是20,然后加1为21.再赋值给jk的私有属性age。
Rs.aword.push(“oo”) 先rs查找私有的aword属性,没有,在查找公有的aword属性,有,结果是数组,引用数据类型,又会开辟一个内存地址,存放数组,将内存地址赋值给aword,然后去给这个地址中的aword添加了一个oo的元素。Jk.aword查找私有的,没有,再查找公有的,有,但是aword是内存地址,再向这个内存地址去查看这个数组,rs和jk查找的aword都是同一个内存地址的数组,所以一改则全改。
复习数组的方法
1.pop push shift unshift split
学习内置对象的方法
- 方法的功能
- 方法的参数
- 方法的返回值
拷贝
- var obj={} var obj2=obj
严格的说这个就是将obj的内存地址赋值给obj2
- 浅拷贝 其实就是将一个对象的属性一个一个的复制到另一个对象中去主要针对第一层的属性。
借助for in
- 深拷贝:如果对象中的属性值又是一个引用数据类型,浅拷贝,还是把后面的引用数据类型的地址赋值给空对象的一个属性,深拷贝,将属性值也一个一个的遍历赋值。
function extend(oldobj,newobj){
for(var key in oldobj){
var item=oldobj[key];
if(item instanceof Array){ //数组
newobj[key]=[]
extend(item,newobj[key]) //递归
}else if(item instanceof Object){ //对象
newobj[key]={};
extend(item,newobj[key])
}else{ //基本类型
newobj[key]=item;
}
}
}