关于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 ...
随机推荐
- MyBatis---join 查询
在实际业务中,经常能碰到多表关联查询 下面的Demo,讲举例join查询在MyBatis中的实现 User 类: package com.zy.domain; import java.io.Seria ...
- ABC065D Built[最小生成树]
这题和某道最短路题神似.对于任意点对,将他们连边,不如将他们分别沿$x,y$轴方向上点按顺序连起来,这样不仅可能多连通一些点,也花费更低,所以按照最短路那题的连边方式跑一个kruskal就行了. #i ...
- JAVA学习第三周
判断某个字符串是否为回文 时间2019年9月23日下午 这个题有很多种写法,其一是用String来存这个字符串,然后调用charAt函数进行字符串的遍历,从两头开始遍历是否相等 其二是用toCharA ...
- k8sSecret资源
Secret资源的功能类似于ConfigMap,但它专用于存放敏感数据,如密码.数字证书.私钥.令牌和ssh key等. 一.概述 Secret对象存储数据以键值方式存储数据,再pod资源中通过环境变 ...
- mongoTemplate CURD 和模糊查询(转)
此文基于Spring的MongoTemplate,介绍MongoDB比较基础常用的增删改查操作.涵盖了从集合创建.索引创建和CRUD操作到更高级的功能(如Map-Reduce和聚合)等等.不多说,直接 ...
- git回退错误的提交
提交代码导致冲突,执行merge后,冲掉其他人的提交.需要reset,并新建分支进行恢复 解决方法: 1.找到最后一次提交到master分支的版本号,即[merge前的版本号] 2.会退到某个版本号 ...
- Mysql入门-对表数据的增删改查
这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mysql的时候, ...
- java 项目 文件关系 扫描 注释注入(3)
@RequestParam和@PathVariable用法小结 https://www.cnblogs.com/helloworld-hyyx/p/5295514.html(copy) @Reque ...
- Count the Buildings ( s1 )
http://acm.hdu.edu.cn/showproblem.php?pid=4372 题意:n个房子在一条线上(n<=2000),高度分别为1~n,现在需要将房子这样放置:从最左往右能看 ...
- 在vue中引入layer弹框的简易方法
npm i --save layui-layer 2.在main.js中引入 import layer from "layui-layer"; 3.然后就可以在各个组件中使用lay ...