对象:
1.有两种方式提供调用其他对象的方法:
call
var typeStr=Object.prototype.toString.call(想获取类型的对象);
typeStr=typeStr.slice(8,-1);
3.自定义构造函数:
function Animal(name,type,barkWay){
this.name=name;
this.type=type;
this.barkWay=barkWay;
}
var dog=new Animal("jj","hh",function(){
console();
});
优化:为了处理函数方法中有相同的代码段 造成资源浪费,要让所有的函数公用一个函数。
但是这种方法也有弊端,增加了全局变量,造成结构混乱。
解决:用原型:
原型:在创建构造方法的时候,系统会默认关联一个神秘对象,这个对象为原型。
原型中的属性和方法可以被使用该构造函数创建出来的对象
原型使用方法:1)利用原型的动态特性给原型对象添加成员
构造函数.prototype.方法名=function(){}
p.方法名();
2)直接替换原型对象
构造函数.prototype={};
2.若原型中的属性是引用类型的属性,那么所有的对象共享该属性,并且一个对象修改了该 引用类型属性中的成员,其他对象也都会受影响
3.一般情况下不会将属性放到原型对象中, 一般情况下原型中只会放需要共享的方法
4.在使用新的对象替换掉默认的原型对象之后
原型对象中的constructor属性会变成 Object
为了保证整个 构造函数---原型----对象 之间的关系的合理性
应做如下操作:
在替换原型对象的时候,在新的原型对象中手动添加 constructor 属性
Person.prototype = {
constructor : Person
};
4.对象:封装 继承(for in) 多态(强类型有 弱类型没有)
for in混入式继承:在for循环中,可以使用对象的属性和方法,也可以赋值。
for(var k in obj1){
obj[k]=obj1[k] //不能使用点的方式
}
1.有两种方式提供调用其他对象的方法:
call
apply
var typeStr=Object.prototype.toString.call(想获取类型的对象);
typeStr=typeStr.slice(8,-1);
3.自定义构造函数:
function Animal(name,type,barkWay){
this.name=name;
this.type=type;
this.barkWay=barkWay;
}
var dog=new Animal("jj","hh",function(){
console();
});
优化:为了处理函数方法中有相同的代码段 造成资源浪费,要让所有的函数公用一个函数。
但是这种方法也有弊端,增加了全局变量,造成结构混乱。
解决:用原型:
原型:在创建构造方法的时候,系统会默认关联一个神秘对象,这个对象为原型。
原型中的属性和方法可以被使用该构造函数创建出来的对象
原型使用方法:1)利用原型的动态特性给原型对象添加成员
构造函数.prototype.方法名=function(){}
p.方法名();
2)直接替换原型对象
构造函数.prototype={};
注意事项:
1.使用对象访问属性时,如果在本身内找不到就会去原型中查找但是使用点语法进行属性赋 值的时候,并不会去原型中查找
使用点语法进行属性赋值时,如果对象中不存在该属性,就会给该对象新增属性2.若原型中的属性是引用类型的属性,那么所有的对象共享该属性,并且一个对象修改了该 引用类型属性中的成员,其他对象也都会受影响
3.一般情况下不会将属性放到原型对象中, 一般情况下原型中只会放需要共享的方法
4.在使用新的对象替换掉默认的原型对象之后
原型对象中的constructor属性会变成 Object
为了保证整个 构造函数---原型----对象 之间的关系的合理性
应做如下操作:
在替换原型对象的时候,在新的原型对象中手动添加 constructor 属性
Person.prototype = {
constructor : Person
};
4.对象:封装 继承(for in) 多态(强类型有 弱类型没有)
for in混入式继承:在for循环中,可以使用对象的属性和方法,也可以赋值。
for(var k in obj1){
obj[k]=obj1[k] //不能使用点的方式
}