首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

lua面向对象:new继承,多态

概述: lua要实现类,继承,多态 BaseClass(super)为生成基类公共方法,内部开辟新的以class_type为模板返回,主要为类的声明服务,一个类有的__init(构造),__delete...(析构),.super(父类),.New(创建对象),setmetatable(class_type, {__index = _class[super]})设置元表,__index指向父类 类的声明BaseView...= BaseView or BaseClass() 类的继承LoginView = LoginView or BaseClass(BaseView) 通过设置class_type.New,会再返回一个新的设置子类的元表...obj, New方法里,setmetatable(obj, { __index = _class[class_type] }),把obj与class_type联系起来,并通过递归调用create,依次调用父类...__delete = false class_type.super = super class_type.New = function(...)

27820

JS 手写: new

# 介绍 MDN-new 运算符 (opens new window) # Try it new 运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。...通过 new 来创建对象实例。 创建一个对象类型,需要创建一个指定其名称和属性的函数;对象的属性可以指向其他对象,看下面的例子: 当代码 new Foo(...)...执行时,会发生以下事情: 一个继承自 Foo.prototype 的新对象被创建。 使用指定的参数调用构造函数 Foo,并将 this (opens new window) 绑定到新创建的对象。...new Foo 等同于 new Foo(),也就是没有指定参数列表,Foo 不带任何参数调用的情况。 由构造函数返回的对象就是 new 表达式的结果。...(一般情况下,构造函数返回值,但是用户可以选择主动返回对象,来覆盖正常的对象创建步骤) 始终可以对已定义的对象添加新的属性。

1.3K10
您找到你想要的搜索结果了吗?
是的
没有找到

JS全局变量

》 ❞ 简明扼要 作用域是「静态」的 作用域通过「词法环境」实现的 词法环境 = 环境记录 + OuterEnv 变量的作用域链由词法环境中OuterEnv串联 在浏览器环境下,globalThis直接指向全局对象...我们在前期的文章中,描述了,V8执行JS代码核心流程 1. 先编译 2. 后执行。在这个编译的过程就是「静态」的。所以我们可以这么说,作用域是「不随代码的运行而改变」的变量查找机制。...❝JS的作用域是静态的 ❞ 同时,作用域还可以被嵌套。...浏览器环境下的globalThis 在浏览器环境下,globalThis直接指向全局对象。...宿主环境的所有内置全局变量(浏览器、Node.js等) 使用const/let定义的全局变量可以保证不受ECMAScript和宿主环境的内置全局变量影响。

12.7K60

JS 继承

Component, // ... } // 使用 class index extends React.Component{ // ... } React github源码 面试官可以顺着这个问 JS...`ployfill` // 仅适用于Chrome和FireFox,在IE中工作: Object.setPrototypeOf = Object.setPrototypeOf || function (...Child.sayHello(); // hello child.sayName(); // my name is Child child.sayAge(); // my age is 18 如果对JS...推荐阅读JS继承相关的书籍章节 《JavaScript高级程序设计第3版》第6章——面向对象的程序设计 6种继承的方案,分别是原型链继承、借用构造函数继承、组合继承、原型式继承、寄生式继承、寄生组合式继承...上卷第6章——行为委托和附录A(ES6中的class) 总结 继承对于JS来说就是父类拥有的方法和属性、静态方法等,子类也要拥有。

2.9K32

js全局变量详解

前言 本文主要介绍3种全局变量的定义方式以及开发中会遇到的一些问题,再加上一点个人见解。...首先简单的介绍一下3种全局变量的定义方式 var a = 1;//方式1 b = 2;//方式2 window.c = 3;//方式3 这3种形式定义出来的全局变量都属于window对象 对于方式1...a);//error window.a = 1; alert(a);//undefined var a = 1; 是不是有点奇怪,说好的兄弟情义呢,这是因为var修饰的变量会预定义,至于为什么,这是js...优点:全局变量一次定义赋值后可以在整个程序中使用,对于常用的对象定义为全局变量,不管对于资源、效率或者编码上都很不错。...缺点:全局变量定义后就会常驻内存,消耗资源;全局变量在一个作用域,对于开发者来说是个挑战,特别是大型项目;这两个问题完全可以由我们coder去避免。

5.7K10

JS进阶:继承

在理解继承之前,需要知道 js 的三个东西: 什么是 JS 原型链 this 的值到底是什么 JSnew 到底是干什么的 一、什么是 JS 原型链 我们知道 JS 有对象,比如 var obj =...如果你的函数调用不是 call 形式, 请将其转换为 call 形式 三、JSnew 到底是干什么的?...,觉得何必呢,我给你们个糖吃,于是 JS 之父创建了 new 关键字,可以让我们少写几行代码: image.png 只要你在士兵前面使用 new 关键字,那么可以少做四件事情: 不用创建临时对象,因为...缺点: 只能继承父类的实例属性和方法,不能继承原型属性/方法 无法实现复用,每个子类都有父类实例函数的副本,影响性能 3、组合继承 组合上述两种方法就是组合继承。...let p = new Rectangle(); // ReferenceError class Rectangle {} 2、ES5继承和ES6继承的区别 ES5的继承实质上是先创建子类的实例对象,

4.4K10

js统一全局变量

前言:js中难免要用到全局变量,但是过多的全局变量会影响js的性能,在此我创造了一个统一全局变量的写法,只需要这一个全局变量即可 /** * 全局变量管理器 */ var overallManager...= (function() { // 存储全局变量,闭包保护不受污染 var overall = {}; /** * @param name * 全局变量名称...== 0) { return null; } // 上一句已经保证至少传入一个name,这里保证name是String类型 name = String(name); // 传value...这样的话一个js用overallManager这一个全局变量就可以了。...甚至可以把它放进基js,所有js都引它,可以通过不同js全局变量的变量名前面加上js文件名前缀的方式去有效避免全局变量名的重复,实现所有全局变量的大一统。

4.7K20

js实现继承

js实现继承 经典继承(原型链) 缺点:过多的继承了没用的属性 Grandfather.prototype.lastName = 'zhang' function Grandfather() {...= 'game' } var son = new Son() console.log(son); ​ son只想要继承grandfather的lastName属性,但是由于原型链的关系...,造成了son既会继承grandfather自神的东西,grandfather的原型的东西,father自身的东西和father原型上的东西,造成了不必要的继承 共享原型 本质:重写原型对象 优点:只会继承父的原型...,不会继承父原本自带的属性或方法(只有调用new Father()才会继承自身的东西) 缺点:给本身的原型添加属性或方法时,会把继承的那个原型也修改了 Father.prototype.lastName...(son.lastName); // zhang 圣杯模式(寄生组合式继承) 雏形 本质:重写原型对象 优点:只会继承父的原型,不会继承父原本自带的属性或方法(只有调用new Father()

5.3K20

html js 全局 变量,JS定义全局变量

【实例名称】 定义全局变量 【实例描述】 在高级开发语言(如c#、Java)中可以很方便地使用“public”等关键字,定义应用程序中的全局变量,但JaVascript的变量只能存在于当前的方法中。...本例通过一个简单的方法实现全局变量的定义。...function toGlobal (varName) { window.execScript(varName); //定义varName为全局使用 } toGlobal(‘window.varText = “全局变量...”;’); //设置全局变量的值 alert(varText); //显示全局变量的值 【运行效果】 【难点剖析】 本例的重点是“window.execscript”方法,execscript所执行的脚本是针对整个全局域的...【源码下载】 为了JS代码的准确性,请点击:定义全局变量 进行本实例源码下载 发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/134413.html原文链接:https

15.6K20

JS原型继承和类式继承

类式继承(构造函数) JS中其实是没有类的概念的,所谓的类也是模拟出来的。特别是当我们是用new 关键字的时候,就使得“类”的概念就越像其他语言中的类了。...我们说的原型继承,就是将父对像的方法给子类的原型。子类的构造函数中拥有这些方法和属性。...child.prototype = new father(); var man = new child(); man.a(); 可以看到第七行实现了原型继承。...他说:“new关键字掩盖了JavaScript中真正的原型继承,使得它更像是基于类的继承。其实new关键字只是Javascript在为了获得流行度而加入与Java类似的语法时期留下来的一个残留物”。...从这里,我们也可以看到类继承和原型基础的一些区别。 结论 原型继承比较符合js这种语言的特点。因为它本身就是js强大的原型的一部分。

3.4K90

JS继承机制总结

JS继承机制总结 继承就是子类可以使用父类的所有功能,并且对这些功能进行扩展。 JS继承机制主要为原型链继承、构造函数继承、组合继承、寄生继承、寄生组合继承、原型式继承和混合式继承。...原型链继承 继承规则 Child.prototype = new Parent() //将子类的原型指向父类的实例 复制代码 代码实例 //定义父类,并在父类中定义属性与方法 function Parent...function Child(name) { this.name = name } ​ //进行原型链继承 Child.prototype = new Parent() Child.prototype.num...,就必须放在Child.prototype = new Parent()这样的语句后面 构造函数继承 继承规则 在子类构造函数内部使用`call或apply`来调用父类构造函数 复制代码 代码实例 function...继承规则 //原型式继承的原理是创建一个构造函数,构造函数的原型指向对象,然后调用 new 操作符创建实例,并返回这个实例,本质是一个浅拷贝。

1.5K10

js 全局变量优点和缺点

全局变量的优点:可以减少变量的个数,减少由于实际参数和形式参数的数据传递带来的时间消耗。 全局变量的缺点: (1)全局变量保存在静态存贮区,程序开始运行时为其分配内存,程序结束释放该内存。...与局部变量的动态分配、动态释放相比,生存期比较长,因此过多的全局变量会占用较多的内存单元。 (2)全局变量破坏了函数的封装性能。...但函数中如果使用了全局变量,那么函数体内的语句就可以绕过函数参数和返回值进行存取,这种情况破坏了函数的独立性,使函数对全局变量产生依赖。同时,也降低了该函数的可移植性。...(3)全局变量使函数的代码可读性降低。由于多个函数都可能使用全局变量,函数执行时全局变量的值可能随时发生变化,对于程序的查错和调试都非常不利。 因此,如果不是万不得已,最好不要使用全局变量

2.7K20
领券