- 创建对象有几种方法
- 原型,构造函数,实例,原型链
- instanceof的原理
- new运算符
创建对象有几种方法
//第一种方式:字面量
var o1={name:'o1'};
var o2=new Object({name:'o2'});
//第二种方式:通过构造函数
var M=function(name){this.name=name};
var o3=new M('o3');
//第三种方式:Object.create
var p={name:'p'};
var o4=Object.create(p);//答出来加分!!
为什么o4对象没有显示name,因为o4本身是一个空对象,通过Object.create()把o4的proto指向传入对象,也就是说传入的对象为o4的原型。所以o4本身是没有name属性的,通过原型链查找到p才会有name属性。
原型,构造函数,实例,原型链
instanceof的原理
原理:判断实例对象的protp与构造函数的prototype引用的是不是同一个地址。
只要是在一条原型链上的都会返回true。
怎么区分是哪个对象的实例
用constructor比用instanceof要严谨一些。
new运算符
<script type="text/javascript">
//第一种方式:字面量
var o1={name:'o1'};
var o2=new Object({name:'o2'});
//第二种方式:通过构造函数
var M=function(name){this.name=name};
var o3=new M('o3');
//第三种方式:Object.create
var p={name:'p'};
var o4=Object.create(p);
//new的本质
var new2=function(func)
{
var o=Object.create(func.prototype);
var k=func.call(o);
if(typeof k==='object')
{
return k;
}else{
return o;
}
}
</script>
注意:若构造函数中没有返回值或返回值是基本类型(Number、String、Boolean)的值,则返回新实例对象;若返回值是引用类型的值,则实际返回值为这个引用类型。