一文看懂JS创建对象的几种方法
发布时间:2022-04-20 09:41:57 所属栏目:语言 来源:互联网
导读:很多人在学习JavaScript时,对于JavaScript创建对象的几种模式不是很理解,这篇文章对工厂模式,构造函数模式,原型模式这三种模式做除了详细介绍,希望对大家学习JS创建对象有所帮助。 创建对象的几种模式: 工厂模式: 工厂是函数的意思。工厂模式核心是定
很多人在学习JavaScript时,对于JavaScript创建对象的几种模式不是很理解,这篇文章对工厂模式,构造函数模式,原型模式这三种模式做除了详细介绍,希望对大家学习JS创建对象有所帮助。 创建对象的几种模式: 工厂模式: 工厂是函数的意思。工厂模式核心是定义一个返回全新对象的函数。 function getObj(name, age) { let obj = {} obj.name = name obj.age = age return obj } let person1 = getObj("cc", 31) 缺点:不知道新创建的对象是什么类型 构造函数模式: 通过一个构造函数,得到一个对象实例。 构造函数和工厂模式区别是: 1,构造函数函数体加了this 2,构造函数没有return 3,构造函数调用时,用new关键字 function CreateObj(name, age) { this.name = name this.age = age } let person1 = new CreateObj("cc", 31) console.log(person1) console.log(person1.constructor === CreateObj); // true console.log(person1 instanceof CreateObj); // true 关于构造函数的两个问题: 1,构造函数和普通函数唯一区别是调用方式。构造函数要用new关键字。如果不用new,则是往Global对象上加属性。下面例子中,CreateObj方法,往window对象上加了name和age属性 function CreateObj(name, age) { this.name = name this.age = age } CreateObj('cc', 10) console.log(window.name) // 'cc' 2,构造函数存在的问题: 构造函数体内的方法,每次创建一个实例,都会创建一遍。 person1.sayName( ) === person2.sayName( ) // false 解决方法是,将sayName定义在createObj外面。 原型模式: 原理是,每个函数都有一个prototype属性。prototype是一个对象,里面定义的属性和方法会被所有实例共享。 关于原型模式,有两个等式: function Person() { } let person1 = new Person() console.log(person1.__proto__ === Person.prototype) // true console.log(Person.prototype.constructor === Person); // true 关于原型对象的三个方法:isPrototype , getPrototypeof,setPrototypeOf, Object.create() (编辑:济南站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |