1、基于Object的方式创建对象
var obj = new Object();
obj.name = '苏鸢';
obj.age = 18;
obj.address = '璃月';
obj.show = function () {
// 方法一使用字符串拼接
// document.write('姓名:' + this.name + '<br>' + '年龄:' + this.age + '<br>' + '住址:' + this.address)
// 方法二使用模板字符串
document.write(
`${'姓名:'+obj.name}<br>
${'年龄:'+obj.age}<br>
${'住址:'+obj.address}<br>`
)
}
// 调用show方法
obj.show();
2、使用对象字面量创建对象
var obj = {
name: '苏鸢',
age: 18,
address: '璃月',
show: function () {
document.write(
`${'姓名:'+obj.name}<br>
${'年龄:'+obj.age}<br>
${'住址:'+obj.address}<br>`
)
}
}
obj.show();
3、使用工厂模式创建对象
工厂模式:通过函数封装创建函数的细节,=> 就是把创建对象的过程封装在函数中。
工厂模式要点: 当你需要什么,只需要传入一个正确的参数,就可以获取你所需要的对象, 而不需要知道里面其中所创建的细节。
工厂模式的弊端:
1.使用 intanceof 无法看出函数之间内在的联系:比如:下面的例子,user1这个实例对象和构造函数(new Object) 的关系.
2.不变的内容(属性,方法),重复调用,浪费资源。
function creatUser(name, age, address) {
var obj = new Object();
obj.name = name;
obj.age = age;
obj.address = address;
obj.show = function () {
document.write(
`${'姓名:'+obj.name}<br>
${'年龄:'+obj.age}<br>
${'住址:'+obj.address}<br>`
);
}
return obj;
}
var user1 = creatUser('优菈', 19, '蒙德');
user1.show()
console.log(user1 instanceof creatUser) //false
4、使用构造函数创建对象。
构造函数有一个约定:首字母大写,
构造函数:就像是一个类,使用了一个模板
构造函数:是来解决函数之间的内部关系。
function creatUser(name, age, address) {
this.name = name;
this.age = age;
this.address = address;
this.show = function () {
document.write(
`${'姓名:'+this.name}<br>
${'年龄:'+this.age}<br>
${'住址:'+this.address}<br>`
)
}
}
var user1 = new creatUser('胡桃', 20, '璃月');
user1.show();
console.log(user1 instanceof creatUser) //true
5、使用 prototype 创建对象。
优点:
1、prototype是一个指针,并指向一个对象。这个指向的对象的所有属性和方法,都会被构造函数的所创建的实例对象所继承(共享)
2、不重复调用内部函数,存在继承属性,不浪费资源。
补充:具体的实例叫做对象,抽象的对象叫原型。
function creatUser(name, age, address) {
this.name = name;
this.age = age;
this.address = address;
}
creatUser.prototype.show = function () {
document.write('姓名:' + this.name + '<br>' + '年龄:' + this.age + '<br>' + '地址:' + this.address);
}
var user1 = new creatUser('刻晴', 21, '璃月');
user1.show()
creatUser.prototype.chara = '甘雨';
console.log(user1.chara); //甘雨