2020-04-11 17:23发布
function Queue() { let items = []; this.enqueue = function(element) { //向队列尾部添加新的项 items.push(element); }
//移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
this.dequeue = function() { return items.shift(); }
//返回队列中第一个元素——最先被添加,也将是最先被移除的元素
this.front = function() { return items[0]; }
this.isEmpty = function() { return items.length == 0; }
this.size = function() { return items.length; } this.print = function() { console.log(items.toString()) }}
enqueue() :向队列尾部添加一个(或多个)新的项。
dequeue() :移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() :返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不
做任何变动(不移除元素,只返回元素信息——与 Stack 类的 peek 方法非常类似)。
isEmpty() :如果队列中不包含任何元素,返回 true ,否则返回 false 。
size() :返回队列包含的元素个数,与数组的 length 属性类似。
function Queue() {
let items = [];
this.enqueue = function(element) {
items.push(element);
}
this.dequeue = function() {
return items.shift();
this.front = function() {
return items[0];
this.isEmpty = function() {
return items.length == 0;
this.size = function() {
return items.length;
this.print = function() {
console.log(items.toString())
//这里写了一个发布订阅模式
(function(window){
function Subscribe(){
this.pond = [];
Subscribe.prototype = {
constructor:Subscribe,
add:function(fn){
var pond = this.pond,
isExit = false;
pond.forEach(function(item){
item === fn?isExit=true:null;
});
!isExit?pond.push(fn):null;
},
remove:function(fn){
var pond = this.pond;
pond.forEach(function(item,index){
if(fn === item){
pond[index] = null;
fire:function(){
for (var i = 0; i < pond.length; i++) {
var curFn = pond[i];
if(curFn===null){
pond.splice(i,1);
i--;
continue;
curFn.apply(this,Array.prototype.slice.call(arguments));
};
window.Subscribe = Subscribe;
})(window);
//我们下边去使用
var subscribe1 = new Subscribe();
function ff1(num1){
console.log(1,num1);
function ff2(num1,num2){
console.log(2,num1,num2);
function ff3(num1,num2,num3){
console.log(3,num1,num2,num3);
function ff4(num1,num2,num3){
console.log(4,num1,num2,num3);
subscribe1.remove(ff3); //删除
//增加
subscribe1.add(ff1);
subscribe1.add(ff2);
subscribe1.add(ff3);
subscribe1.add(ff4);
//触发
subscribe1.fire();
subscribe1.fire(1,2,3);
enqueue 从队列尾部添加一个元素
dequeue 从队列头部删除一个元素
head 返回头部的元素,注意,不是删除
size 返回队列大小
clear 清空队列
isEmpty 判断队列是否为空
tail 返回队列尾节点
然后我们逐一实现
let Queue = (function () {
let items = new WeakMap()
// WeakMap结构与Map结构基本类似。区别是它只接受对象作为键名,
// 不接受其他类型的值作为键名。键名是对象的弱引用,当对象被回收后,
// WeakMap自动移除对应的键值对,WeakMap结构有助于防止内存泄漏。
class Queue {
constructor() {
items.set(this, [])
// 入队列
enqueue(item) {
let queue = items.get(this)
queue.push(item)
// 出队列
dequeue() {
return items.get(this).shift()
// 返回队列头
head() {
return queue[0]
// 返回队列大小
size() {
return queue.length
// 清空队列
clear() {
// 判断队列是否为空
isEmpty() {
return queue.length === 0
// 返回队尾
tail() {
return queue[queue.length - 1]
return Queue
})
Js给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条轻松学习Js之路。Js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、晦涩难懂,如:闭包、内置...
看图:
基本类型( 6种 ):Number ( 数值 ) String ( 字符串 )Boolean ( 布尔 ) Undefined ( 未定义 )Null ( 空 )ES6 - Symbol ( 唯一 )
JavaScript 使网页增加互动性,使有规律地重复的HTML文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由 CGI 验证。JavaScript 的特点是无穷无尽的,只要你有创意。...
timeoutId: 定时器IDfunc: 延迟后执行的函数code: 延迟后执行的代码字符串,不推荐使用原理类似eval()delay: 延迟的时间(单位:毫秒),默认值为0param1,param2: 向延迟函数传递而外的参数,IE9以上支持setInterval: 以固定的时间间隔重复调用一个函...
Number类型String类型Boolean类型Undefined类型Null类型
空格在ASCII中的值为32,空字符为0,可本人觉得不就是都是为空的吗,没有什么区别?char mychar1,mychar2;mychar1=' ';mychar2='\0';printf(mychar1=%d,mychar2=%d,mychar1,mychar2);//其中mychar1=32;mychar2=0;...
1.变量名可以有数字0~9、大小写字母、下划线、美元符$组成。2.变量名不能以数字开头。 当我们以数字为开头时,代码就会出现橙色下划线,代表命名不...3.变量名不允许使用中文。 不能允许使用中文这个就不用多说了吧,不管你在哪找代码来看,代码中...4.区分大小写...
向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...
我觉得getTopWindow() 应该是他自己写的函数 mask 应该是getTopWindow()函数中 return 出的一个什么玩意show() jQuery的显示
看上图
如图所示
1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...
如图所示,最简单的选项卡思路:选项卡就是点击按钮切换到相应内容,其实就是点击按钮把内容通过display(block none)来实现切换的。1、首先获取元素。2、for循环历遍按钮元素添加onclick 或者 onmousemove事件。3、因为点击当前按钮时会以高亮状态显示,所以...
1、js截取两个字符串之间的内容:123var str = aaabbbcccdddeeefff; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee2、js截取某个字符串前面的内容:123var str = aaabbbcccdddeeefff; tr = str.match(/(\S*)fff/)[1];......
如果是ajax 就直接获取如果是传到一个页面 就再get再在js中使用 就可以获取了。 可以在js中获取一个变量 但是不能写入一段java代码.
最多设置5个标签!
function Queue() {
let items = [];
this.enqueue = function(element) { //向队列尾部添加新的项
items.push(element);
}
//移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
this.dequeue = function() {
return items.shift();
}
//返回队列中第一个元素——最先被添加,也将是最先被移除的元素
this.front = function() {
return items[0];
}
this.isEmpty = function() {
return items.length == 0;
}
this.size = function() {
return items.length;
}
this.print = function() {
console.log(items.toString())
}
}
enqueue() :向队列尾部添加一个(或多个)新的项。
dequeue() :移除队列的第一(即排在队列最前面的)项,并返回被移除的元素。
front() :返回队列中第一个元素——最先被添加,也将是最先被移除的元素。队列不
做任何变动(不移除元素,只返回元素信息——与 Stack 类的 peek 方法非常类似)。
isEmpty() :如果队列中不包含任何元素,返回 true ,否则返回 false 。
size() :返回队列包含的元素个数,与数组的 length 属性类似。
function Queue() {
let items = [];
this.enqueue = function(element) {
items.push(element);
}
this.dequeue = function() {
return items.shift();
}
this.front = function() {
return items[0];
}
this.isEmpty = function() {
return items.length == 0;
}
this.size = function() {
return items.length;
}
this.print = function() {
console.log(items.toString())
}
}
//这里写了一个发布订阅模式
(function(window){
function Subscribe(){
this.pond = [];
}
Subscribe.prototype = {
constructor:Subscribe,
add:function(fn){
var pond = this.pond,
isExit = false;
pond.forEach(function(item){
item === fn?isExit=true:null;
});
!isExit?pond.push(fn):null;
},
remove:function(fn){
var pond = this.pond;
pond.forEach(function(item,index){
if(fn === item){
pond[index] = null;
}
});
},
fire:function(){
var pond = this.pond;
for (var i = 0; i < pond.length; i++) {
var curFn = pond[i];
if(curFn===null){
pond.splice(i,1);
i--;
continue;
}
curFn.apply(this,Array.prototype.slice.call(arguments));
}
}
};
window.Subscribe = Subscribe;
})(window);
//我们下边去使用
var subscribe1 = new Subscribe();
function ff1(num1){
console.log(1,num1);
}
function ff2(num1,num2){
console.log(2,num1,num2);
}
function ff3(num1,num2,num3){
console.log(3,num1,num2,num3);
}
function ff4(num1,num2,num3){
console.log(4,num1,num2,num3);
subscribe1.remove(ff3); //删除
}
//增加
subscribe1.add(ff1);
subscribe1.add(ff2);
subscribe1.add(ff3);
subscribe1.add(ff4);
//触发
subscribe1.fire();
subscribe1.fire(1,2,3);
enqueue 从队列尾部添加一个元素
dequeue 从队列头部删除一个元素
head 返回头部的元素,注意,不是删除
size 返回队列大小
clear 清空队列
isEmpty 判断队列是否为空
tail 返回队列尾节点
然后我们逐一实现
let Queue = (function () {
let items = new WeakMap()
// WeakMap结构与Map结构基本类似。区别是它只接受对象作为键名,
// 不接受其他类型的值作为键名。键名是对象的弱引用,当对象被回收后,
// WeakMap自动移除对应的键值对,WeakMap结构有助于防止内存泄漏。
class Queue {
constructor() {
items.set(this, [])
}
// 入队列
enqueue(item) {
let queue = items.get(this)
queue.push(item)
}
// 出队列
dequeue() {
return items.get(this).shift()
}
// 返回队列头
head() {
let queue = items.get(this)
return queue[0]
}
// 返回队列大小
size() {
let queue = items.get(this)
return queue.length
}
// 清空队列
clear() {
items.set(this, [])
}
// 判断队列是否为空
isEmpty() {
let queue = items.get(this)
return queue.length === 0
}
// 返回队尾
tail() {
let queue = items.get(this)
return queue[queue.length - 1]
}
}
return Queue
})
相关问题推荐
Js给初学者的印象总是那么的杂而乱,相信很多初学者都在找轻松学习Js的途径。在这里给大家总结一些学习Js的经验,希望能给后来的学习者探索出一条轻松学习Js之路。Js给人那种感觉的原因多半是因为它如下的特点:A:本身知识很抽象、晦涩难懂,如:闭包、内置...
看图:
基本类型( 6种 ):Number ( 数值 ) String ( 字符串 )Boolean ( 布尔 ) Undefined ( 未定义 )Null ( 空 )ES6 - Symbol ( 唯一 )
JavaScript 使网页增加互动性,使有规律地重复的HTML文段简化,减少下载时间。JavaScript 能及时响应用户的操作,对提交表单做即时的检查,无需浪费时间交由 CGI 验证。JavaScript 的特点是无穷无尽的,只要你有创意。...
timeoutId: 定时器IDfunc: 延迟后执行的函数code: 延迟后执行的代码字符串,不推荐使用原理类似eval()delay: 延迟的时间(单位:毫秒),默认值为0param1,param2: 向延迟函数传递而外的参数,IE9以上支持setInterval: 以固定的时间间隔重复调用一个函...
Number类型String类型Boolean类型Undefined类型Null类型
空格在ASCII中的值为32,空字符为0,可本人觉得不就是都是为空的吗,没有什么区别?char mychar1,mychar2;mychar1=' ';mychar2='\0';printf(mychar1=%d,mychar2=%d,mychar1,mychar2);//其中mychar1=32;mychar2=0;...
1.变量名可以有数字0~9、大小写字母、下划线、美元符$组成。2.变量名不能以数字开头。 当我们以数字为开头时,代码就会出现橙色下划线,代表命名不...3.变量名不允许使用中文。 不能允许使用中文这个就不用多说了吧,不管你在哪找代码来看,代码中...4.区分大小写...
向一个对象数组里面添加新的属性var arry= [{a:11,b:22,c:33,d:44},{a:11,b:0,c:0,d:44},{a:11,b:22,c:99,d:99}];var arry2=[];arry.map(((item, index)=> {arry2.push(Object.assign({},item,{mess1:item.c,mess2:item.d}))}))cons...
我觉得getTopWindow() 应该是他自己写的函数 mask 应该是getTopWindow()函数中 return 出的一个什么玩意show() jQuery的显示
看上图
如图所示
1、原型对象也是普通的对象,是对象一个自带隐式的 __proto__ 属性,原型也有可能有自己的原型,如果一个原型对象的原型不为 null 的话,我们就称之为原型链 2、 原型链是由一些用来继承和共享属性的对象组成的(有限的)对象链...
如图所示,最简单的选项卡思路:选项卡就是点击按钮切换到相应内容,其实就是点击按钮把内容通过display(block none)来实现切换的。1、首先获取元素。2、for循环历遍按钮元素添加onclick 或者 onmousemove事件。3、因为点击当前按钮时会以高亮状态显示,所以...
1、js截取两个字符串之间的内容:123var str = aaabbbcccdddeeefff; str = str.match(/aaa(\S*)fff/)[1]; alert(str);//结果bbbcccdddeee2、js截取某个字符串前面的内容:123var str = aaabbbcccdddeeefff; tr = str.match(/(\S*)fff/)[1];......
如果是ajax 就直接获取如果是传到一个页面 就再get再在js中使用 就可以获取了。 可以在js中获取一个变量 但是不能写入一段java代码.