[Js++开发历程] 模拟面向对象

1.2 模拟面向对象

要说到面向对象,Java的语法规范应该会比较熟悉,C#也同样。

谈到面向对象就得做到封装,对于Javascript如何做封装才最有效呢?不禁让我联想到闭包

1.2.1 闭包

  闭包是能够读取其他函数内部变量的函数。

1.2.2 链式作用域

  JavaScript语言特有的"链式作用域"结构(chain scope),子对象会一级一级地向上寻找所有父对象的变量。

所以,父对象的所有变量,对子对象都是可见的,反之则不成立。

 

综合以上两点,Js++ 的面向对象都在函数体内实现“成员变量”和“成员函数”。

1.2.3 现在疑问就是这些“成员变量”和“成员函数”如何能开放出来,使得外界可以访问呢?其实有普遍有两种方法:

A. 将“成员变量”和“成员函数”做json成员,然后通过 return 关键字 从函数返回。

var D = function(){
 
return { //然后通过 return 关键字 从函数返回。
  v:1,
  fun:function(){
 
  }
};
 
};
 
var Class = D();

 

 

B. 通过传出一个对象,将“成员变量”和“成员函数”扩展到此对象中

 

var D = function($){
 
 $.extend($,{  // “成员变量”和“成员函数”扩展到此对象$
   a:1,
   fun:function(){
 
   }
 });
};
 
var Class = {};
D(Class);

 

 

C. 其实有一种更加巧妙的方法是通过 Function.caller

Function.caller

  返回一个对函数的引用,该函数调用了当前函数。

  有了此caller,我们就可以“成员变量”和“成员函数”存入到外围的函数上

 

function jpublic(overrides) {
    $.extend(jpublic.caller.$Public, overrides);
}
function jprotected(overrides) {
    $.extend(jprotected.caller.$Public, overrides);
}
 
var D = function(){  // 外围的函数
 
  jpublic({  // “成员变量”和“成员函数” 会存入外围的函数的$Public变量上
    a:1,
    fun:function(){
 
    }
  });
 
  jprotected({
    b:2
  });
 
};
 
var Class = D().$Public;
 

 

此时,就可以定义类似public,protected,private等关键字来区分类“成员变量”和“成员函数”不同作用域

 

 

1.2.4 关于继承的模拟

  可以采用原型链的方式

 

1.2.5 对父类成员的“成员函数”的访问

    由于在继承的模拟原型链中,已将子类和父类prototype通过superclass关联,因此可以这样访问:

'class A'.j(function(){
  jpublic({
    fun:function(){
 
    }
  });
 
});
 
'class B extends A'.j(function(){
  jpublic({
    fun:function(){
      B.superclass.fun.apply(this,arguments);  //通过superclass关联访问父类成员的“成员函数” fun
      // 可用 jsuper(this); 替换 B.superclass.fun.apply(this,arguments);
    }
  });
 
});

 

B.superclass.fun.apply(this,arguments); 这个写太长,而且麻烦,有没有更好的呢,经过多次的实践,终于又回到了Function.caller

 

function jsuper(jthis) {
    var m = jsuper.caller;  // 获得当前调用者,以上的例子为"fun" 函数
    if (m.methodname && m.owner) { // 在类定义时,已将每个“成员函数”的函数名和所属的类的构造函数存入到每个“成员函数”中
        var method = m.methodname;
        var owner = m.owner;
        var args;
        if (arguments.length > 1) { // 如果 jsuper 有传入参数,则采用传入参数,否则采用 fun 的 arguments
            args = $.toArray(arguments, 1);
        } else {
            args = $.toArray(m.arguments);
        }
        return owner.superclass[method || 'constructor'].apply(jthis, args); //访问父类成员的“成员函数” fun
    }
    return null;
}
 

 

1.2.6 在“成员函数”中使用“静态变量”

  Js++ 将静态变量存在类的构造函数中,可通过 jstatic.caller.owner获取构造函数

function jstatic(overrides) {
    if (arguments.length == 0) {
        return jstatic.caller && jstatic.caller.owner;
          //在类定义时,已将每个“成员函数”的函数名和所属的类的构造函数存入到每个“成员函数”中
    }
    return $.extend(jstatic.caller.$Static, overrides);
}

 

 

 

1.2.7 完整例子:

 

'class C extends P implements I'.j(function(csuper){
 
     jstatic({
         a:1
     });
 
     jpublic({
         constructor: function () {
             jsuper(this);
         },
         echo:function(){
             console.log(jstatic().a);
         }
     });
 
     jprotected({
 
     });
 
     jprivate({
 
     });
 
},'alias class name');

 

 

Windows上MSYS2的安装和使用 MSYS2这个工具我是越用越喜欢,很多东西放在Linux上如鱼得水但是放在Windows上就没那么好用,比如ffmpeg,opencv等直接引用就行了,这个工具真的很省事。接下来带你们看看它的妙用。1、好好研究确实妙用无穷。 阅读详情

相关推荐

Human3.6M 数据集介绍及下载

360 万张 3D 人体姿势和对应图像11 名专业演员(6 男 5 女)7 个场景(讨论、吸烟、拍照以及打电话等等)

XavierJ的博客 3万+

Java入门学习指南:从课后习题到知识体系构建的实战路径

Java作为一门面向对象的编程语言,其核心在于通过类与对象、封装、继承、多态等机制构建复杂的软件系统。理解其底层原理,如JVM内存管理、垃圾回收机制,是掌握Java技术价值的关键。在实际开发中,Java广泛应用于企业级后端服务、安卓应用开发和大数据处理等场景。对于初学者而言,构建扎实的知识体系远比寻找标准答案更为重要。本文聚焦Java基础入门,深入探讨数据类型、流程控制、数组操作和面向对象思想等核心概念,并结合**环境配置**和**IDE调试**等实践技巧,帮助学习者从“解题”转向“构建系统性编程思维”,为

weixin_34409357的博客 403

1. 如何使用扣子工作流一键生成儿童绘本(可以发到小红书,微信公众号图文等)

本文介绍了使用扣子智能体一键生成儿童绘本的工作流。用户只需输入绘本主题,系统会自动生成Markdown格式内容,可直接发布到优快云、小红书等平台,还支持推送至微信公众号草稿箱。操作步骤包括:访问扣子网站导入工作流源代码,输入主题试运行,查看实时进度和最终输出结果。工作流编辑器会显示每个节点的执行状态和耗时,支持通过"查看日志"功能回溯历史运行记录。文末附有工作流源代码下载链接。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 1246

JavaScript

JavaScript

南城余coding的博客 223

AMBA-CHI协议详解(十)

该规范提供了一个Request Retry(请求重试)机制,确保当请求到达一个Completer 时,它要么被接受,要么被给予一个RetryAck响应,以防止阻塞REQ通道。

Crazzy_M的博客 986

一文读懂 STAR-CCM+:多物理场仿真王者,从入门到精通全攻略(附实战路线)

STAR-CCM+是西门子旗下的多物理场仿真平台,集流体、传热、结构、电磁等耦合求解于一体。其核心优势包括:全自动网格处理技术(支持十亿级网格)、多物理场无缝耦合、CPU/GPU并行加速计算、流程自动化与设计探索等。广泛应用于汽车(空气动力学优化、电池热管理)、航空航天(气动设计、发动机仿真)、能源(风电叶片流固耦合)、电子(芯片散热)等行业。相比ANSYS Fluent和OpenFOAM,STAR-CCM+在多物理场耦合和复杂几何处理方面更具优势,适合工业级高精度仿真需求。学习路径建议从基础操作入手,逐步

源代码杀手的博客 339

js01--js基础入门

js基础入门

m0_73461526的博客 439

聊聊蓝牙配对技术-CTKD OVER BR/EDR

摘要:本文探讨了蓝牙设备通过跨传输密钥派生(CTKD)机制实现双模连接的技术细节。研究发现,手机在连接双模耳机时优先通过BR/EDR配对,再利用CTKD派生BLE连接所需的密钥。关键条件包括:设备地址一致性、启用安全连接(Secure Connection)及禁用justworks配对方式。文章详细剖析了从BR/EDR链路密钥派生BLE长期密钥(LTK)的算法流程,重点解析了H6/H7加密函数的作用机制与安全差异。研究还通过HCI日志验证了密钥交换和加密建立的完整过程,指出蓝牙5.1版本对CTKD安全性的强

十多年蓝牙协议软件开发,擅长蓝牙协议分析 2692

java发展及安装

机器语言第一代语言:由0和1组成汇编语言:提高代码可读性,解决人类无法读懂机器语言;指令代替二进制第三代语言:大体分为:面向过程和面向对象两大类,两者相辅相成c语言是典型的面向过程语言,c++\java是典型的面向对象语言现在已有的语言:c \ c++ \ java \ c# \ python \ php \ javascript \ ……c是比较底层的语言。

qq_68549203的博客 812

2026年大数据开发工程师常见面试选择题

大数据面试高频考点解析 摘要:本文汇总了30道大数据开发面试高频题目,涵盖Hadoop生态、Spark、Flink、Kafka等核心组件。重点包括:1)HDFS架构与特性(5V特征、副本机制);2)MapReduce/Spark原理(Shuffle过程、RDD抽象);3)实时计算(Kafka消费组、Flink Watermark);4)数据仓库设计(分层模型、性能优化)。特别强调数据倾斜、小文件问题等实战场景的解决方案,以及从日志、资源等多维度排查任务异常的方法。掌握这些基础原理和典型问题应对策略,是应对大

不务正业的猿 450

【学习系列】SAP RAP 22:Excel文件上传和读取(非扩展&扩展方式)

本文介绍了在RAP中实现Excel文件上传处理的三种方法:1) 使用@Semantics.largeObject注解实现简单上传下载,但限制在ObjectPage页面使用;2) 通过自定义action弹窗实现上传功能,但存在无法自动刷新列表等限制;3) 结合CustomUIExtension实现更灵活的完整功能,但需要UI5开发技能。文章详细说明了每种方法的实现步骤,包括数据库表设计、注解配置、前端界面开发和后端处理逻辑,并比较了各自的优缺点。最后通过一个处理不同币种数据的示例,展示了如何实现业务处理逻辑。

DeveloperMrMeng的博客 623

Android开发学习路径与实战技巧全指南

移动应用开发中,Android平台因其开放性占据重要地位。从技术架构看,现代Android开发以Kotlin语言为基础,采用Jetpack组件实现模块化解耦,其中MVVM模式通过LiveData实现数据驱动UI。开发环境配置方面,Android Studio的VM调优和模拟器加速能显著提升效率。在工程实践层面,Jetpack Compose的声明式UI开发方式相比传统XML布局更高效,配合ViewModel可构建响应式界面。性能优化需重点关注冷启动时间和内存管理,使用Baseline Profiles和Me

weixin_33749242的博客 324

使用 ABAP Development Tool 登录 SAP BTP ABAP 环境时,遇到弹出框应该怎么办?

但在实际环境里,隐私模式、第三方 Cookie 禁止、跨站追踪限制、缓存代理误命中、混合内容拦截等因素,都可能让这条跳转链路被打断。等),浏览器会弹出系统原生登录框,请求用户输入账号和口令或做集成认证。只要它们在响应头里出现,浏览器就会理直气壮地弹框,这是协议层的强约定。,最终弹出原生登录框。前端与网关领域有个通用的经验规则:如果你看到了原生登录框,而期望的是带样式的。环境里的登录方式表述为基于浏览器的前端认证,也就是这类重定向式的交互。环境的具体落地,拆出几类常见诱因与排障路径,并穿插真实世界的案例。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 369

游戏编程十年总结(上)

自敲第一行代码起,已经十年多了,今天既不是十年整的日子,也不是一个有特定意义的日子,本来像这种大总结的文章,当择良辰吉日,斋戒沐浴三日,方可动笔。一开始计划是写一篇五年总结的,但各种原因一拖再拖,于是就变成了十年总结。光阴似箭,时不我待,转眼已经在奔三的路上了,离大叔的称呼很近了,但离大神的称呼还很远,在此谨以此文总结反思这十年技术生涯的点滴,与诸君共勉。编程之前 大概是读初一的时候,家中有幸让我得到了一台二手电脑,那时的心情比现在让我得到一堆苹果电脑更加兴奋。但这是一台不能连网,也没有任何游戏和软件

RjEX73j1I的博客 197

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

java入门基础(一)//重温基础获得的新知识

@[TOC]目录 #JAVA是什么 #JAVA的运行机制 ##JVM虚拟机是什么 ##java解释JAVA为什么可以实现跨平台 #java为什么占据行业老大(java特点) #环境变量配置以及配置他们的作用 #JAVA编码规范 ##语法规定 ##标识符的约定俗成 #其他零散注意知识点 #JAVA是什么 自然语言:与人交流 机器语言:与计算机交流的语言 编程语言: 作为人我们能操作计算机硬件所用的语言 java属于编程语言,在c语言c++的基础上增加了面向对象的语法。更加易于我们编程理解。 #JAVA的运行机

qq_42901537的博客 202

STM32F407中文手册

STM32f407中文手册 本参考手册面向应用开发人员,提供有关使用 STM32F405xx/07xx、STM32F415xx/17xx、 STM32F42xxx 和 STM32F43xxx 微控制器存储器与外设的完整信息。STM32F405xx/07xx、STM32F415xx/17xx、STM32F42xxx 和 STM32F43xxx 构成一个微 控制器系列,各产品具有不同的存储器大小、封装和外设。有关订购信息以及器件的机械与电气特性,请参见数据手册。有关 ARM Cortex™-M4F 内核的信息,请参见《Cortex™-M4F 技术参考手册》。

R语言的发明者是新西兰统计学家Ross Ihaka和Robert Gentleman

R语言的诞生可以追溯到上世纪90年代早期。在此之前,统计学家和数据分析人员主要依赖于S语言,这是一种由贝尔实验室(Bell Labs)的统计学家John Chambers在1976年发明的编程语言。

MD Code 280

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

Web 版翻译者资料库

本项目是桌面版《翻译者资料库》的 Web 移植版,基于 Spring Boot 3.3、Thymeleaf、Bootstrap 5.3 与 MySQL 8.0 构建。它面向翻译写作提供资料、词汇、句库、文本工具、对照制作、查找、备份恢复及旧库迁移等功能,完整继承桌面版核心业务规则,支持一键启动与离线访问。

howard2005的专栏 140

V8 机制、手写核心函数与 TypeScript 类型体操

或固定初始化(如数组先定长、对象先给全字段)保持类型与形状稳定;这些都比"换框架"更基础。只能处理纯数据(丢函数、Date、RegExp、循环引用报错)。生产级深拷贝要处理:原始值短路、循环引用、V8(Chrome / Node 的 JS 引擎)不是"解释一行跑一行"那么简单,它用。图:V8 执行流程——解释执行 + 热点优化,优化失败会 Deopt 回退。JS 内存自动管理,但"自动"不等于"不会漏"。是"固定间隔最多执行一次"。手写 Promise 是"懂异步"的试金石。是"停下后才执行最后一次",

qq_38468358的博客 346

副队长BootStrap5探究(2)--按钮与按钮组

本文系统讲解Bootstrap 5按钮组件的使用与底层原理。通过CDN引入框架,掌握btn基础类及primary、success等主题色应用,学习轮廓按钮(btn-outline-*)、尺寸控制(btn-lg/sm)、块级布局(d-block)和禁用状态(disabled)等实用功能。结合源码解析,深入理解其基于CSS的圆角、过渡动画、伪类交互实现机制,实现“快速上手+原理掌握”的双重目标,助力前端技能进阶。

编程副队长 573

React 性能:memo / useMemo / useCallback

讲清 memo/useMemo/useCallback 的配合与边界,先测量再优化,避开常见过早优化。

JudithHuang的博客 325

DSH (DeepSeek Harness) Windows 升级安装指南20261107

注意:如果在普通窗口执行 nvm 提示找不到命令,或执行 nvm use 提示 Access is denied,请务必关闭当前窗口,重新打开一个管理员CMD 执行上述完整路径命令。找到 .credentials.yaml,将其重命名为 .credentials.yaml.bak(备份并使其失效)。Node.js Storage Location:可改到非系统盘(如 D:\dev\nvm,避免路径含空格或中文)。打开文件资源管理器,进入 C:\Users<你的用户名>.dsh\。

fengye207161的博客 193

SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在

# SpringBoot「衣依」服装销售平台:144个Java文件180个接口,从挑衣服到收货评价整条链路都在 > 这是一套基于 Spring Boot 的服装销售平台源码,配套 `db.sql` 建表脚本,业务覆盖商品展示、购物车、订单流转、收货地址、订单评价、商品评论、在线客服、轮播图和资讯。形态是**前后台双端**:前台是顾客逛的商城,后台是管理员管的控制台。本文带你看清里面有什么、怎么跑

面朝大海 226

微信小程序-wxs

在微信开发者工具中右键创建.wxs后缀的文件。每个.wxs文件也是一个独立模块,同样使用导出内容。示例(文件return d;FOO: foo,bar: bar(外联定义参考官方文档)

dreams_dream的博客 343

设计模式(unity游戏研发版)

当你使用图形用户界面类时通常会遇到一个问题。比如,你创建了自定义按钮类并允许客户端在按钮中注入自定义代码,这样当用户按下按钮时就会触发这些代码。观察者模式允许任何实现了订阅者接口的对象订阅发布者对象的事件通知。你可在按钮中添加订阅机制,允许客户端通过自定义订阅类注入自定义代码。在Unity中,这就像UnityEvent在Inspector中绑定多个回调。

m0_63330263的博客 96

使用echarts模拟甘特图

项目中需按时间段展示不同颜色的数据,通过解析时长并统计各类型总时长,结合预设颜色映射表(含自定义与默认色),动态生成ECharts图表。利用sumByTypeName聚合数据,为每类分配对应颜色,实现图例与柱状图的精准匹配,确保多时段、多类型数据可视化清晰准确。

uuai 28

【技术专题】JavaScript 网页技术 - JavaScript 流程控制

小锋老师推出《一天学会JavaScript(无废话版)》视频教程,涵盖基础语法、流程控制、函数、数组对象、DOM操作及ES6新特性。内容精炼,配套课件与源码打包下载,助力快速入门。重点讲解if/else、switch、for/while循环、for...of/in遍历及break/continue使用场景,并通过成绩判断实例演示实际应用。适合零基础学习者高效掌握核心技能。

java1234的博客 162
上一篇: [Js++开发历程] DOM的遍历
下一篇: [Js++开发历程] Javascript 不完整的继承
staffrobot
博客等级 码龄19年 6粉丝 37原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符  | 博主筛选后可见
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值