对象: 特指自然世界中的某个事物 , 具有一些特征(属性)和行为(方法),比如姚明这个对象有姓名,性别,身高,球号,球队等等这些特征,并且会运球,投篮,跑步,吃饭等这些行为,那我们如何使用js创建对象呢?
第一种:字面量的方式创建实例对象
var YaoMing = { name:YaoMing, age:36, gender:男, eat:function(){ console.log('吃臭豆腐'); }, read:(){ console.log('疯子在左天才在右'); } }
var per2=new Object(); per2.name=大蛇丸; per2.age=30; per2.sex=男; per2.eat=function () { console.log(吃榴莲); }; per2.play=function () { console.log(这个小蛇真好玩); };
这时候检测per2是否是Object的实例,返回true
function Person(name, age, gender) { this.name = name; this.age = age; this.gender = gender; this.play = function () { console.log(天天打游戏); }; } var per = new Person(雏田, 18, 女); console.log(per instanceof Person);//返回true
现在思考第三种自定义构造函数创建对象,其内部实现过程是怎样的??
拿上面的例子来说,创建对象 var per = new Person(雏田, 18, 女); 实例化一个对象的同时对属性age,name,gender也完成了初始化赋值。内部过程如下 :
* 1.开辟空间存储对象
* 2.把this设置为当前的对象
* 4.把this对象返回
第四种:工厂模式创建对象
<script> //工厂模式创建对象 function createObject(name,age) { var obj=new Object(); obj.name=name; obj.age=age; obj.sayHi=function () { console.log(您好); }; return obj; } //自定义构造函数创建对象 function Person(name,age) { this.name=name; this.age=age; this.sayHi=function () { console.log(您好); }; } </script>
工厂模式创建对象 : var per1=createObject(小明,20);
自定义构造函数创建对象 :var per2=new Person(小红,20);
通过对比以上两种创建对象的方式,我们可以得出以下结论:
工厂模式创建对象
1.函数名小写,2.函数内部使用new关键字,3.并且有返回值,4.new之后的对象是当前的对象,5.直接调用函数就可以创建对象。
1.函数名首字母大写,2.函数内部没有使用new关键字,3.没有返回值,4.this代表当前的对象,5.通过new的方式创建对象。