分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 教程案例

JS创建对象的七种方式

发布时间:2023-09-06 01:28责任编辑:赖小花关键词:暂无标签

工厂模式

用函数来封装以特定接口创建的对象,可以无数次调用该函数

function creatPerson (name,age) { ???var o = new Object (); ???o.name = name; ???o.age = age; ???o.sayAge = function () { ???????console.log (this.age); ???}; ???return o;}var person1 = creatPerson ("John",22);var person2 = creatPerson ("Amy",15);

缺点:无法知道对象类型

构造函数模式

自定义对象类型的属性和方法(构造函数始终以大写字母开头)

function Person (name,age) { ???this.name = name; ???this.age = age; ???this.sayAge = function () { ???????console.log (this,age); ???}}var person1 = new Person ("John",22);var person2 = new Person ("Amy",15);

person1和person2既是Object对象,也是Person对象

缺点:每个方法都要在是实例上重新创建一次,占用内存空间(不同实例上的同名函数是不相等的)

原型模式

只要创建了一个新的函数,就会为该函数创建一个prototype属性,该属性是一个指针,指向函数的原型对象,原型对象的constructor属性指向构造函数。我们在原型对象中添加属性和方法。构造函数与实例无直接关系,实例中的指针仅指向原型,不指向构造函数。

function Person () {}Person.prototype = { ???name : "John", ???age = 30, ???sayAge : function () { ???????console.log (this.age); ???}}

缺点:修改原型对象导致 所有实例的该属性全部被修改,没有自己独有的属性。

组合使用构造函数和原型模式

创建自定义类型最常见的模式。使用构造函数定义实例属性,使用原型模式定义方法和共享属性。

function Person (name,age) { ???this,name = name; ???this.age = age;}Person.prototype = { ???constructor : Person, ???sayAge : function () { ???????console.log (this.name); ???}}

动态原型模式

将所有信息封装在构造函数中,在构造函数中初始化原型。

function Person (name,age) { ???this.name = name; ???this.age = age; ???//在sayAge不存在的情况下添加到原型中,只在初次调用构造函数时执行 ???if (typeof this.name != "function") { ???????Person.prototype.sayAge = function () { ???????????console.log (this.age); ???????} ???}}

寄生构造函数模式

与工厂模式相仿。函数仅仅封装创建对象的代码,返回新创建的对象。返回的对象与构造函数或者原型属性之间没有联系。

function Person (name,age) { ???var o = new Object (); ???o.name = name; ???o.age = age; ???o.sayAge = function () { ???????console.log (this.age); ???}; ???return o;}var friend = new Person ("John",25);

缺点:无法知道对象类型

 稳妥构造函数模式

稳妥对象指没有公共属性的对象。适合在安全环境或者防止数据被改动时使用。属性只能通过方法来访问,直接访问不到。

function Person(name, age) { ?????var o = new Object(); ???????o.sayName = function() { ????????//只有这里可以访问name,其他地方未定义name属性 ????????console.log(name); ?????}; ?????o.setName = function(value) { ?????????name = value; ?????}; ??????return o; ?}; ???var friend = Person("Nicholas", 29); friend.sayName(); //Nicholas

缺点:无法知道对象类型

JS创建对象的七种方式

原文地址:http://www.cnblogs.com/yoyoy/p/7979040.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved