javaScript面向对象的几种写法

javaScript面向对象的几种写法javaScript 面向对象的几种写法基本的写法 也是最浪费资源的写法 dog run 就调用了 dog 的 run 方法 但是这里只有一条狗 而不能量产 vardog name 啊黄 color 黄色 run function console log run

javaScript面向对象的几种写法

  • 字面量的方式创建对象写法,也是最浪费资源的写法。dog.run()就调用了dog的run方法。但是这里只有一条狗,想要n条狗就要var狗,不能量产,也就是要创建多个实例会导致代码冗余。
var dog = { name:'啊黄', color:'黄色', run:function () { console.log(this.name + 'run'); } }; console.log(dog.name); dog.run(); 
  • 内置构造函数创建对象的写法,这是一种内置函数和字面量的方式创建对象的方法,但是创建的对象无法复用,也会导致代码冗余。
 var dog1 = new Object(); dog1.name = '阿黄'; dog1.color = '黄色'; dog1.run = function(){ console.log(this.name + 'run'); }; console.log(dog1.name); dog1.run(); 
  • 工厂函数创建对象的写法,这里可以量产还可以传递参数,如var dog1 = new Dog(‘旺财’,‘yellow’);就有了dog1,以此类推就有dog2,dog3···,但是这种方法是借助创建Object对象来创建d,然后返回d来实现的,这种方法会发现无法区分对象的类型。
function Dog(name,color) { var d = new Object(); d.name = name; d.color = color; d.run = function () { console.log(this.name + 'run'); }; return d; } var dog1 = new Dog('旺财','yellow'); console.log(dog1.name); dog1.run(); 
  • 自定义构造函数创建对象的方法,构造函数的方法是通过构造函数与new关键字连用,在内部会默认创建一个新的对象,然后把这个对象赋值给this,默认使用ruturn关键字把这个对象返回。这种方法每new一个dog,都会为这个dog产生相应的属性和方法,不知道你们有没有注意到这个run在每一个对象实现的内容是一样的,为了更好地节约资源···
function Dog(name,color) { this.name = name; this.color = color; this.run = function () { console.log(this.name + 'run'); }; } var dog1 = new Dog('旺财','yellow'); console.log(dog1.name); dog1.run(); var dog2 = new Dog('阿毛','white'); //dog1的run并不等于dog2的run console.log(dog1.run === dog2.run); //false 
  • 自定义构造函数创建对象的方法,把对象公用的方法提取出来,作为全局变量,这样子每个对象都能访问,但是这样子会破坏对象的封装性(run方法不是构造函数Dog的方法),还会污染全局变量。
var run = function () { console.log(this.name + 'run'); }; function Dog(name,color) { this.name = name; this.color = color; this.run = run; } var dog1 = new Dog('旺财','yellow'); console.log(dog1.name); dog1.run(); var dog2 = new Dog('阿毛','white'); //dog1的run并不等于dog2的run console.log(dog1.run === dog2.run); //true 为什么会打印出来true?因为引用类型数据传递的是内存地址。{如果不了解引用类型,详情见本博客的(值数据类型与引用类型)} 
  • 自定义构造函数创建对象使用原型对象来保存相同的方法,使用原型这种方法把run()放进这个构造函数的共享库里面(这个run()只有一个),通过Dog new 出来的对象都可以使用这个方法。
function Dog(name,color) { this.name = name; this.color; } Dog.prototype.run = function () { console.log(this.name + 'run'); }; var dog1 = new Dog('旺财','yellow'); console.log(dog1.name); dog1.run(); var dog2 = new Dog('阿毛','white'); //dog1的run等于dog2的run console.log(dog1.run === dog2.run); 
  • 传递对象来接受属性
function Dog(option) { var option = option || {}; this.name = option.name; this.color = option.color; } Dog.prototype = { run:function () { console.log(this.name + 'run'); } }; var dog1 = new Dog({ name:'旺财', color:'yellow' }); console.log(dog1.name); dog1.run(); var dog2 = new Dog({ name:'啊毛', color:'white' }); //dog1的run等于dog2的run console.log(dog1.run === dog2.run); 

希望可以帮到有需要的人,如果有什么问题,望指出

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/221347.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月17日 下午6:20
下一篇 2026年3月17日 下午6:20


相关推荐

  • EIGRP协议的配置

    EIGRP协议的配置EIGRP EnhancedInte 增强型内部网关路由协议 是 Cisco 公司开发的一个平衡混合型路由协议 它融合了距离向量和链路状态两种路由协议的优点 支持 IP IPX 和 ApplleTalk 等多种网络层协议 由于 TCP IP 是当今网络中最常用的协议 因此本书只讨论 IP 网络环境中的 EIGRP 一 EIGRP 概述 EIGRP 是

    2026年3月17日
    1
  • AFL 生态圈

    AFL 生态圈AFL 生态圈在本文中 我们将讨论的不是经典 AFL 本身 而是关于为其设计的实用程序及其修改 我们认为 这些实用程序可以显着提高模糊测试的质量 如果你想知道如何提高 AFL 以及如何更快地找到更多漏洞 继续阅读 什么是 AFL 它有什么用 AFL 是一种覆盖引导或基于反馈的模糊器 关于这些概念的更多信息可以在一篇很酷的论文 Fuzzing Art Science andEnginee

    2026年3月18日
    2
  • 汇报措辞:你懂得如何向领导汇报吗(审阅、审批、审阅、批示、查阅)?「建议收藏」

    汇报措辞:你懂得如何向领导汇报吗(审阅、审批、审阅、批示、查阅)?

    2022年1月22日
    250
  • Predicate接口

    Predicate接口Predicate 接口的默认方法 可以实现条件中的与 amp amp 或 非 判断 通过默认方法实现 importjava util function Predicate Predicate 接口 条件判断 对某种数据类型进行判断 从而得到一个 boolean 值结果 publiccl

    2025年6月19日
    6
  • iOS学习之 plist文件的读写

    iOS学习之 plist文件的读写

    2021年12月14日
    41
  • oracle sqlldr 用法详解

    oracle sqlldr 用法详解转自 http blog chinaunix net uid 23622436 id 2394093 html 在 Oracle 数据库中 我们通常在不同数据库的表间记录进行复制或迁移时会用以下几种方法 1 A 表的记录导出为一条条分号隔开的 insert 语句 然后执行插入到 B 表中 2 建立数据库间的 dblink 然后用 createtable nbsp Basselect f

    2026年3月17日
    1

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号