js高级——面向对象day3
1.继承的3种实现方式
所谓继承,就是对象自己没有的成员,调用别的对象的
混入式继承
通过for in 方法循环遍历父对象的属性,并添加到子对象中
原型继承
3种方式:
1.通过对象的动态特性 给对象的原型添加属性和方法
2.将原型替换成新的对象
(注意:替换成新对象应添加constructor:构造函数的地址)
3.混入式给原型添加成员经典继承
是ECMAScript5添加的新方法 Object.create()
var 接收绑定好的新对象 = Object.create(想要作为原型绑定的对象)
新方法有兼容性问题
解决:
检测浏览器是否支持此方法,不支持可以
1.自己重写并绑定此方法(需用到proto属性,引入新的兼容性问题,不推荐)
if(Object.create){
var newObj = Obiect.create(obj1);
}else{
Object.create=function(obj){
function F(){
}
F.prototype=obj;
new o = new F();
return o;
}
var newObj = new F(obj1);
}
2.自己封装函数
function create(obj){
if(Object.create){
return = Object.create(obj);
}else{
function F(){
}
F.prototype = obj;
return new F();
}
}
2.Object原型的成员
- constrctor:构造函数的地址
- proto:原型的地址
- toString():转化成通用格式的字符串
- toLocalString():转化成本地格式的字符串
- valueOf():当进行运算时先自动调用valueOf,如果不能运算调用toString进行字符串拼接
- hasOwnProperty()判断对象自身是否拥有某属性
- propertyIsEnumerable()先判断对象自身是否拥有某属性,再判断此属性是否可以迭代(遍历)
3.创建函数的3种方式
直接声明
function f(){
}表达式
var f = function(){
}构造函数
var f = new Function();
4.arguments对象
arguments是函数内的对象,是一个伪数组
无论函数是否有形参,都将传入的实参全部存储到arguments中
5.eval
JSON.parse()
可以将传入的json格式的字符串转化为对象
JSON对象有兼容问题eval()
var jsonStr = "
{
name:jack,age:18
}";
//可解析套()json格式字符串为对象
eval('('+jsonStr+')');
//或拿变量接收一下,否则当代码块解析
eval('var obj='+jsonStr);
6.静态成员和实例成员
构造函数的成员为静态成员
对象的成员为实例成员