js栈内存和堆内存以及用JavaScript实现静态私有变量,静态私有方法,私有变量,私有方法,公有属性,公有办法

js栈内存和堆内存

内存分配与垃圾回收
在编译阶段,除了声明变量和函数,查找环境中的标识符这两项工作之外,还会进行内存分配。不同类型的数据会分配到不同的内存空间
一般来说栈内存线性有序存储,容量小,系统分配效率高。而堆内存首先要在堆内存新分配存储区域,之后又要把指针存储到栈内存中,效率相对就要低一些了。
垃圾回收方面,栈内存变量基本上用完就回收了,而堆内存中的变量因为存在很多不确定的引用,只有当所有调用的变量全部销毁之后才能回收。

  • 栈内存:引擎执行代码时工作的内存空间,除了引擎,也用来保存基本值和引用类型值的地址。
  • 堆内存:用来保存一组无序且唯一的引用类型值,可以使用栈中的键名来取得。
    在这里插入图片描述
    解析: 引擎不能直接操作堆内存中的数据,这就造成了对同一个变量赋不同类型的值,会出现完全不同的效果:为一个变量赋基本值时,实际上是创建一个新值,然后把该值赋给新变量,可以说这是一种真正意义上的"赋值";
    为一个变量赋引用值时,实际上是为新变量添加一个指针,指向堆内存中的一个对象,属于一种” 赋址 "操作。
    ——赋值与赋址

总的区别:
在这里插入图片描述

用JavaScript实现静态私有变量,静态私有方法,私有变量,私有方法,公有属性,公有办法

导语:
JavaScript作为一门面对对象的编程语言,但是它没有private,public,和static,那是否它就没办法实现面对对象编程的一些属性呢?不是的,只需要使用JavaScript的一些特性,照样可以写出这些东西出来。

直接看代码,使用闭包实现。

var food = (function() {
	var foodnum = 0;	//静态私有属性
	function checkfood(name) {}		//静态私有方法
	//创建类
	function _food(newid, newname ,newprice) {
		var name, price		//私有变量
		function checkfood() {}		//私有方法
		this.getname = function() {}
		this.getprice = function() {}
		this.setname = function() {}
		this.setprice = function() {}
		this.id = newid		//公有属性
		this.name = newname
	    this.price = newprice 
		this.copy = function() {}	//公有方法
		foodnum++	
		this.setname(name)	//构造器
		this.setprice(price)	//构造器
 	}
 	_food.prototype = {
		isgoodfood = false,	//静态公有属性
		display = function() {}		//静态公有方法
	}
	return _food	//返回类
})()
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值