创建对象有多种不同的方法:
1. Object构造函数(无法做到 代码复用)
var obj1 = new Object();
obj1.name = ‘xiaocuo’;
obj1.age = 25;
obj1.sayHi = function (){
alert(‘hi,大家好!我叫’ + obj1.name);
}
2. 对象字面量(无法做到 代码复用)
var obj3 = {
name: ‘laozhao’,
age: 23,
sayHi: function (){
alert(‘hi,大家好!我叫’ + obj3.name);
}
}
3. 工厂模式(解决了代码复用的问题,但是无法解决方法共享,对象类型识别的问题)
function createObj( n, a ){
// 原料
var obj = {};
// 加工
obj.name = n;
obj.age = a;
obj.sayHi = function (){
alert(‘hi,大家好!我叫’ + obj.name);
}
// 出厂
return obj;
}
var obj1 = createObj(‘小王’, 23);
var obj2 = createObj(‘小李’, 24);
console.log( obj1.sayHi === obj2.sayHi ); // false
console.log( obj1.constructor ); // Object
4. 构造函数(解决了对象类型识别的问题,但是没有解决方法共享)
function Human( n, a ){ // 构造函数
// var this = {};
this.name = n;
this.age = a;
this.sayHi = function (){
alert(‘hi,大家好!我叫’ + this.name);
}
// return this;
}
var obj1 = new Human(‘张三’, 18);
var obj2 = new Human(‘李四’, 19);
console.log( obj1.sayHi === obj2.sayHi ); // false
console.log( obj1.constructor ); // Human
5. 原型模式 (解决了方法共享等问题,但是所有实例对象的属性和方法都一样,没有私有属性和方法)
prototype的作用是:所有添加到prototype中的属性和方法都将被所有对象实例共享。(继承)
function Cat(){ };
Cat.prototype.name =‘小白’;
Cat.prototype.color =‘white’;
Cat.prototype.food =‘fish’;
Cat.prototype.skill = function (){
alert(‘卖萌~喵喵喵~~~’);
};
var cat1 = new Cat();//实例
var cat2 = new Cat();//实例
alert(cat1.skill === cat2.skill);//true
alert(cat1.name === cat2.name);//true
6. 混合模式 (完胜!结合了构造函数模式和原型模式的优点)
构造函数模式用于定义实例属性,原型模式用于定义共享的属性和方法
即可以共享方法,又可以向构造函数传递参数,集两种模式之长!
function Person(n,s,a){
this.name = n;
this.sex = s;
this.age = a;
}
Person.prototype.attr = '人类';
Person.prototype.eat = function (){
alert('什么都吃');
}
var p1 = new Person('老王','男',36);
var p2 = new Person('小宋','女',26);
console.log(p1.constructor);//Person
console.log(p1.eat === p2.eat);//true
…
喜欢可以点个赞哦,笔芯 ~
来源:CSDN
作者:气泡啊
链接:https://blog.csdn.net/weixin_44691775/article/details/104417060