一,字面量创建
js对象是键值对集合
var obj={
键1:值1,
键2:值2,
方法名1:function(){},
方法名2:function(){}
}
二,new 对象创建
new Object();O大写
var obj=new Object(); //创建一个空白对象
// console.log(obj);
obj.name="小白";
obj.age=12;
obj.show=function () {
console.log("秀儿同学");
}
obj.walk=function () {
console.log("走猫步");
}
以上两种方式创建对象的弊端:
1.每次创建一个对象 都要单独绑定属性跟方法 步骤很麻烦
2.这种造对象的方式 不可能大批量创建 所以我们需要一个工厂来造对象。
三,工厂函数造对象
优点
- 把对象绑定属性跟方法的过程 封装起来 反复调用;
- 那么代码的复用率很高 而且很方便的 重复大批量造对象;
缺点
- 创建出的对象类型很不明确
//工厂函数造对象
function createNewObj(name,age){
var obj=new Object();
obj.name=name;
obj.age=age;
obj.show=function () {
console.log("请不要秀");
}
obj.walk=function () {
console.log("朕要巡视了...");
}
return obj;
}
var newObj=createNewObj("小白",12);
console.log(newObj);
var newObj1=createNewObj("(●—●)",16);
console.log(newObj1);
// 批量造对象
for(var i=0;i<10;i++){
var per=createNewObj("哈哈"+i,i+10)
console.log(per);
}
构造函数创建对象
构造函数名必须大写,构造函数就是函数,只不过为了和普通函数分开
构造函数中this是什么?
this表示当前对象,谁new就指向谁
变量的驼峰命名规则
第一个首字母小写,随后的首字母大写。
new关键字的四个作用
构造函数之所以能够创建出对象 跟new关键字的作用密不可分。
- 开辟内存空间,存储新创建的对象;
- 将this指向当前对象;
- 执行内部代码,为当前对象绑定属性和方法;
- 返回新创建的对象。
构造函数和普通函数的区别:
构造函数和普通函数 调用方式不同:
- 普通函数 : 函数名();
- 构造函数 : new 函数名();
我们如何知道该函数 是构造函数还是普通函数呢? - 就看函数名是否大写 所以要求我们 如果当前函数被我们定义为构造函数;
- 那么函数名必须大写(虽然不大写也不报错 但是潜规则为了区分 一定要大写);
总结: 构造函数和普通函数 从函数定义上来看 没有任何区别;
但是 调用方式有区别。
- 构造函数就用构造函数的模式调用 new;
- 普通函数就用普通函数的调用模式 函数名()
//创建一个构造函数
function Person(name,age){
this.name=name;
this.age=age;
this.show=function () {
console.log("构造函数对象的show");
}
this.walk=function () {
console.log("构造函数的走路方法");
}
}
// 根据构造函数创建对象
var per=new Person("小白",12);
console.log(per);
var per1=new Person("小红",18);
console.log(per1);
//如果构造函数 用普通函数的调用方式去调用会怎么样? 无意义!!!!
var p= Person();
console.log(p);*/
function show() {
console.log("我是show函数");
//控制台:我是show函数
}
//如果普通函数使用了构造函数的调用方式 会怎么样? 没有对象诞生 但是会执行里面的代码
var s=new show();
console.log(s);