JS进阶对象Object
理解
初识篇:多种创建对象的方式
一、使用new Object()
- 通过
new
字符直接创建一个对象,对象属性不变,在被调用时this
指向被赋值的变量。
let obj1 = new Object();
obj1.age = 25;
obj1.getName = function (name) {
console.log(name + ',' + this.age);
}
obj1.getName('java'); //java,25
二、使用隐式字面创建:直接使用{}
创建
- 这种方式比较直观,容易理解。
let obj2 = {};
obj2.name = 'go';
obj2.age = 20;
obj2.getnotice = function () {
console.log(this.name + ',' + this.age);
}
obj2.getnotice(); // go,20
三、使用字面创建:直接在{...}
中增加属性和方法
- 容易理解、维护,也常用
let obj2 = {
name: 'python',
age: 29,
getactive: function () {
console.log(this.name + "," + this.age);
}
}
obj2.getactive(); // python,29
四、使用工厂模式
- 工厂模式就是将对象封装在一个函数内部,使其不被暴露,通过传参进行方法调用和获取属性值,通过
return
进行暴露对象。
function obj3(name, age) {
let o = new Object();
o.name = name;
o.age = age;
o.getmessage = function () {
console.log(this.name + ',' + this.age);
}
return o;
}
obj3('javaScript', 25).getmessage(); //javaScript,25
五、使用构造函数创建
- 通过instanceof可以知道每个实例的Object,是谁实例化的。
function obj4(name, age) {
this.name = name;
this.age = age;
this.getinfrom = function () {
console.log(this.name + ',' + this.age);
}
}
let o4 = new obj4('html', '50');
o4.getinfrom(); //html,50
六、使用原型模式创建
- 原型都共享了属性和方法,在实例化属性后,会覆盖原型属性,拥有自己的属性方法。
function obj5(){} //构造函数
obj5.prototype.name = 'apple'; // 通过prototype进行增加属性和方法
obj5.prototype.age = 44;
obj5.prototype.getinfo = function () {
console.log(this.name + ',' + this.age)
}
let o5 = new obj5();
o5.getinfo(); // apple,44
七、使用混合模式【构造函数+原型模式】
- 混合模式共享相同方法的引用,但它们又保证了自己的私有属性,节省了内存空间。
构造函数
用来定义实例属性,原型模式
用定义方法和共享属性
//7.1 构造函数
function obj6(name, age) {
this.name = name;
this.age = age;
}
// 7.2 原型模式
obj6.prototype = {
constructor: obj6,
getalter: function () {
console.log(this.name + ',' + this.age);
}
}
let o6 = new obj6('c语言', 48);
o6.getalter(); // c语言,48
let o7 = new obj6('c++',45);
o7.getalter(); // c++,45
总结:
比较常见的创建对象的方法就这些,写文主要是加固自己对创建对象的理解,优快云中有许多优秀的人把每一种方法都有详写,从中自己也get到了许多知识点
下一篇:对Object属性的解剖理解