javascript高级知识分析——作为对象的函数

代码信息来自于http://ejohn.org/apps/learn/。

函数和对象是不是非常相似?

var obj = {};
var fn = function(){};
console.log( obj && fn );//true
var obj = {};
var fn = function(){};
obj.prop = "some value";
fn.prop = "some value";
console.log( obj.prop == fn.prop, "都是对象,都有属性." );

可不可以把返回的结果存储到缓存里?

function getElements( name ) {
  var results; 

  if ( getElements.cache[name] ) {
    results = getElements.cache[name];
  } else {
    results = document.getElementsByTagName(name);
    getElements.cache[name] = results;
  } 

  return results;
}
getElements.cache = {}; 

console.log( "返回的结果: ",  getElements("pre")); ///HTMLCollection [ <pre> ]
console.log( "返回和缓存完全相同", getElements("pre") === getElements.cache.pre);  //true

当我们访问的通过一系列操作获取到的内容,通过缓存先前的结果,可以提高性能。

题目:修改这段代码,使之可以缓存结果

function isPrime( num ) {
  var prime = num != 1;
  for ( var i = 2; i < num; i++ ) {
    if ( num % i == 0 ) {
      prime = false;
      break;
    }
  }
  return prime;
} 

console.log( isPrime(5));
console.log( isPrime.cache[5] );
时间: 2024-08-01 00:01:08

javascript高级知识分析——作为对象的函数的相关文章

javascript高级知识分析——定义函数

代码信息来自于http://ejohn.org/apps/learn/. 可以使用哪些方式来声明函数? function isNimble(){ return true; } var canFly = function(){ return true; }; window.isDeadly = function(){ return true; }; console.log(isNimble, canFly, isDeadly);//function isNimble() function canF

javascript高级知识分析——函数访问

代码信息来自于http://ejohn.org/apps/learn/. 可以通过函数的名字在它的内部引用它. function yell(n){ return n > 0 ? yell(n-1) + "a" : "hiy"; } console.log( yell(4) === "hiyaaaa", "在函数的内部通过它的名字访问它自己" ); 当不通过命名函数来声明时,在其内部如何调用自己? var ninja =

javascript高级知识分析——上下文

如果函数是一个对象的属性,那么它可以? var katana = { isSharp: true, use: function(){ this.isSharp = !this.isSharp; } }; katana.use(); console.log( katana.isSharp );//false; 在javascript中,函数的内部,this默认指向调用它的对象.本例katana.use(),函数use被对象katana调用,所以在函数内部,this.isSharp可以操作katan

javascript高级知识分析——实例化

代码信息来自于http://ejohn.org/apps/learn/. new做了什么? function Ninja(){ this.name = "Ninja"; } var ninjaA = Ninja(); console.log( ninjaA, "undefined,ninja并不是实例化" ); var ninjaB = new Ninja(); console.log( ninjaB.name == "Ninja", "

javascript高级知识分析——灵活的参数

代码信息来自于http://ejohn.org/apps/learn/. 使用数量可变的参数对编程很有好处 function merge(root){ for(i = 0 ; i < arguments.length; i++) for(var key in arguments[i]) return root[key] = arguments[i][key] } var merged = merge({name: "John"}, {city: "Boston"

读javascript高级编程05-面向对象之创建对象

1.工厂模式 工厂模式是一种常用的创建对象的模式,可以使用以下函数封装创建对象的细节: function CreatePerson(name,age){ var p=new Object(); p.name=name; p.age=age; p.speak=function(){ console.log("my name is "+p.name); } return p; } var p1=CreatePerson('Wang',15); p1.speak(); var p2=Crea

Effective JavaScript Item 55 接受配置对象作为函数参数

接受配置对象作为函数参数 虽然保持函数接受的参数的顺序很重要,但是当函数能够接受的参数达到一定数量时,也会让用户很头疼: var alert = new Alert(100, 75, 300, 200, "Error", message, "blue", "white", "black", "error", true); 随着函数的不断重构和进化,它能够接受的参数也许会越来越多,最终就像上面的例子那样. 对

Javascript基础知识盲点总结——对象

一.定义对象的基本格式: var hero = { breed: 'Turtle', occupation: 'Ninja', talk: function(){ alert("A!!"); } author: { firstname: 'Martin', lastname: 'Lu' } } 属性名加不加引号都可以,但是当属性名有保留字或特殊字符(空格等)时,需要加引号 二.对对象属性的操作 可以随时为对象添加/删除属性或者方法: var hero = {}; hero.breed

Javascript高级程序设计——this、闭包、函数表达式

在javascript中函数声明会被提升,而函数表达式不会被提升.当函数执行时,会创建一个执行环境和相应的作用域链,然后利用arguments和其他的命名参数的值来初始化函数的活动对象,作用域链链中所有的外部活动对象都处于第二的位置. function compare(num1, num2){ if(num1 < num2){ retunr -1; } else if(num1 = num2){ retunr 0; } else(num1 > num2){ retunr 1; } } var