关于JavaScript实例化的理解
要理解这个,我们首先要理解一个概念“类”,所谓类,指的是对象的模版。对象就是类的实例。由前面我们知道,对象是单个实物的抽象,所以通常需要一个模版,表示某一类实物的共同特征,然后对象根据这个模版生成,这个过程就叫做对象实例化。但是在JS中是没有“类”这个概念的,而是用构造函数来作为对象模版的,所谓构造函数,指的就是专门生成对象的函数。
两个相关的概念:
类:比如 人类 (对象的模板、实物的共同特征)
通过关键字:new (在JS中是没有“类”这个概念的,而是用构造函数来作为对象模版的)
实例:比如 王小二 (
那么,王小二的父母孕育他直到出生的过程,就叫:实例化
function Human(name){
this.name = name;
}
var wangxiaoer = new Human('王小二'); //这一步叫作 实例化
JavaScript定义的函数为什么得实例化才能用
静态的成员变量和方法,都是不需要进行实例化类的。可以直接在类上调用进行,不能在类的实例上调用。静态方法通常用于创建实用程序函数。
非静态的成员变量和方法,都要进行实例化类的。才可以调用
关于静态的成员变量和方法的理解:
类(class)通过 static 关键字定义静态方法。不能在类的实例上调用静态方法,而应该通过类本身调用。这些通常是实用程序方法,例如创建或克隆对象的功能。
静态变量应该在静态区分配,不在堆上。每个变量定义的时候只能初始化一次,“初始化”从字面意思理解就是第一次,第二次赋值就不能算了。
就像上面说的,静态变量的生存期为整个程序,所以只能初始化一次。但是普通局部变量定义一次初始化后当函数结束调用变量就不存在了,再次调用的时候又分配一个变量又可以进行一次初始化。
所以多次调用多次定义了这个变量,从而多次初始化。
栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。
堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表。
参考地址:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Classes/static
function a (){
this.add = function(a,b){
alert(a+b);
}
}
a.add(1,2);// a.add is not a function
var A = new a();
A.add(1,2);//ok
如上,我定义了一个a,想直接调用a去不行,得实例化一个a才能调用其属性,为什么?
关于JavaScript实例化的理解的更多相关文章
- javascript单例模式的理解
javascript单例模式的理解 阅读目录 理解单例模式 使用代理实现单例模式 理解惰性单例 编写通用的惰性单例 单例模式使用场景 回到顶部 理解单例模式 单例模式的含义是: 保证一个类只有一个实例 ...
- JavaScript面向对象的理解
JavaScript面向对象的理解 笔记链接: http://pan.baidu.com/s/1c0hivuS 1:JavaScript 中分两种对象,函数对象和普通对象new Function() ...
- javascript javascript面向对象的理解及简单的示例
javascript面向对象的理解及简单的示例 零.本节重点: 1.封装: 2.继承: 壹.下面理解: 一. javascript面向对象概念: 为了说明 JavaScript 是一门彻底的面向对象的 ...
- javaScript深入浅出之理解闭包
javaScript深入浅出之理解闭包 引言 闭包是个老生长谈的话题了,对于闭包网上也有很多不同的看法 <你不知道的javaScript>对于闭包是这么定义的:函数创建和函数执行不在同一个 ...
- javascript 之原型理解
最近一直在了解javascript原型的问题,也算是理解了一点,希望把我所理解的,用简单的例子和说明,让更多人清除的去理解javascript原型 1,原型 prototype 是一个什么东西 我们创 ...
- javascript对象的理解
从代码中体会javascript中的对象: <!DOCTYPE html> <html> <head> <meta charset="utf-8&q ...
- JavaScript:彻底理解同步、异步和事件循环(Event Loop) (转)
原文出处:https://segmentfault.com/a/1190000004322358 一. 单线程 我们常说"JavaScript是单线程的". 所谓单线程,是指在JS ...
- 通过JavaScript原型链理解基于原型的编程
零.此文动机 用了一段时间的Lua,用惯了Java C++等有Class关键字的语言,一直对Lua的中的面向对象技术感到费解,一个开源的objectlua更是看了n遍也没理解其中的原理,直到看到了Pr ...
- javascript类的理解和使用
距离上次写博客已经过去好几个月了,现在手里的项目正好都结束了,闲暇之后开始理一下开发中一些问题,这次说一下javascript当中的类,可能很多人对于写惯了前台页面效果的coder来说,对于javas ...
随机推荐
- string::append
string (1) string& append (const string& str); substring (2) string& append (const strin ...
- 2019.9.29 FlutterToast使用
引入 fluttertoast: ^ 增加头文件 import 'package:fluttertoast/fluttertoast.dart'; 样式 1 Fluttertoast.showToas ...
- Hadoop-No.12之数据采集的时效性
数据采集的时效性,指的是可进行数据采集的时间与Hadoop中工具可访问数量的时间之间的间隔.采集架构的时间分类会对存储媒介和采集方法造成很大的影响. 一般来说,在设计应用的采集构架之前建议使用以下分类 ...
- Python之exec()/compile()方法使用
# Python内置函数exec()可以用来执行Python代码 # 或内置函数compile()编译的代码对象 # exec程序中可写入python语法格式的代码,并直接输出. exec('prin ...
- robotframework 模拟滚动鼠标到底部
Execute Javascript var ele = document.getElementsByClassName("right_main")[0];ele.scrollTo ...
- 【环境配置】出现:Microsoft Visual C++ 14.0 is required 的解决方案
参考blog https://download.csdn.net/download/amoscn/10399046 https://blog.csdn.net/weixin_42057852/arti ...
- kubernetes1.17集群部署
学习自:https://www.jianshu.com/p/789bc867feaa ###批量配置免秘钥 密码可自行修改 这里的密码是123456 yum install -y expect ss ...
- HDU 3826 Squarefree number ( 唯一分解定理 )
题目链接 题意 : 给出一个数.问其能不能被任何一个平方数整除.如果可以则输出 No 即不是 Square-free Number .否则输出 Yes 分析 : 首先 N 有 1e18 那么大.不能暴 ...
- Python之禅 this模块
The Zen of Python, by Tim Peters Beautiful is better than ugly.Explicit is better than implicit.Simp ...
- (十七)C语言之变量