JS笔记

---this 作用域----------------------------------------------------

一、

var foo = {

bar: function() { return this.baz; },

baz: 1

};

(function(){

return typeof arguments[0]();

})(foo.bar);

考察this作用域的问题,

var foo = {

bar: function() { console.log(this);return this.baz; },

baz: 1

};

foo.bar();如果代码是这样的,这个时候的this是指向foo这个json对象;

var foo = {

bar: function() { console.log(this);return this.baz; },

baz: 1

};

(function(){

return typeof arguments[0]();

})(foo.bar);如果如题目中这样,相当于代码:

(function(){

return typeof arguments[0]();

})(function() { console.log(this);return this.baz; });

,this则是指向foo定义的函数function(){}这个匿名函数对象,而这个匿名函数的baz变量又没有定义,所以答案就是"undefined",也就是:A

PS:区分foo这个json对象,与匿名函数function(){}中的this.baz指向不同的值。

二、

------------------------------------------------------

var name = "The Window";

  var object = {

    name : "My Object",

    getNameFunc : function(){

      return function(){

        return this.name;

     };

    }

};

alert(object.getNameFunc()());  //The Window

三、

var name = "The Window";

var object = {

name : "My Object",

getNameFunc : function(){

alert(‘1.‘ + this.name);

return function(){

return this.name;

};

}

};

var func = object.getNameFunc();  //My Object

alert(‘2.‘ + func());  //My Object  The Window

alert(‘3.‘ + func.call(object)); //My Object  My Object

alert(‘4.‘ + func.apply(object));//My Object  My Object

//2.The Window 其它都是My Object

// return--------------------------------------------

var Singleton = (function () {

var instantiated;

function init() {

/*这里定义单例代码*/

return {

publicMethod: function () {

console.log(‘hello world‘);

},

publicProperty: ‘test‘

};

}

return {

getInstance: function () {

if (!instantiated) {

instantiated = init();

}

return instantiated;

}

};

})();

/*调用公有的方法来获取实例:*/

Singleton.getInstance().publicMethod();

// return----------------------------------------------

// JS 后面的参数----------------------------------------------

//src="http://feeds.delicious.com/v2/json/codepo8/javascript?count=5&callback=delicious"

// ()()----------------------------------------------

(function(t){

//code

})(aa)

// UglifyJS ----------------------------------------------

RequireJS提供了一个打包压缩工具r.js来对模块进行合并压缩。r.js非常强大,不但可以压缩js,css,甚至可以对整个项目进行打包。

r.js的压缩工具使用UglifyJS或Closure Compiler。默认使用UglifyJS(jQuery也是使用它压缩)。此外r.js需要node.js环境,当然它也可以运

行在Java环境中如Rhino。

// require  shim exports  deps----------------------------------------------

六、加载非规范的模块

理论上,require.js加载的模块,必须是按照AMD规范、用define()函数定义的模块。但是实际上,虽然已经有一部分流行的函数库(比如jQuery

)符合AMD规范,更多的库并不符合。那么,require.js是否能够加载非规范的模块呢?回答是可以的。这样的模块在用require()加载之前,要先

用require.config()方法,定义它们的一些特征。举例来说,underscore和backbone这两个库,都没有采用AMD规范编写。如果要加载它们的话,

必须先定义它们的特征。

  require.config({

    shim: {

      ‘underscore‘:{

        exports: ‘_‘

      },

      ‘backbone‘: {

        deps: [‘underscore‘, ‘jquery‘],

        exports: ‘Backbone‘

      }

    }

  });

require.config()接受一个配置对象,这个对象除了有前面说过的paths属性之外,还有一个shim属性,专门用来配置不兼容的模块。具体来说,

每个模块要定义(1)exports值(输出的变量名),表明这个模块外部调用时的名称;(2)deps数组,表明该模块的依赖性。

比如,jQuery的插件可以这样定义:

  shim: {

    ‘jquery.scroll‘: {

      deps: [‘jquery‘],

      exports: ‘jQuery.fn.scroll‘

    }

  }

// 详解js中typeof、instanceof与constructor---------------------------------------------

http://www.cnblogs.com/walkingp/archive/2009/09/18/1568912.html

typeof返回一个表达式的数据类型的字符串,返回结果为js基本的数据类型,包括number,boolean,string,object,undefined,function.语法为

typeof(data) 或 typeof data

instanceof则为判断一个对象是否为某一数据类型,或一个变量是否为一个对象的实例;返回boolean类型

语法为 o instanceof A

---------------------------------------------

var baz;

(function(){

var foo = 10;

var bar = 2;

var baz = function(){

return foo * bar;

};

})();

baz();

-------------------------------------------------------

<script type="text/javascript">

function createFunctions(){

var result = new Array();

for (var i=0; i < 10; i++){

result[i] = function(num){

return function(){

return num;

};

}(i);

}

return result;

}

var funcs = createFunctions();

//every function outputs 10

for (var i=0; i < funcs.length; i++){

document.write(funcs[i]() + "<br />");

}

</script>

10

.

.

.

.10

----

单例要考察我们的东西有很多,比如私有构造函数,静态构造函数,静态字段,readonly和const的区别等等

---------------------------------------------------

单例的优点:

1.保证了所有的对象访问的都是同一个实例

2.由于类是由自己类控制实例化的,所以有相应的伸缩性

单例的缺点:

1.额外的系统开销,因为每次使用类的实例的时候,都要检查实例是否存在,可以通过静态实例该解决。

2.无法销毁对象,单例模式的特性决定了只有他自己才能销毁对象实例,但是一般情况下我们都没做这个事情。

---------------------------------------------------

事件委托是什么

让利用事件冒泡的原理,让自己的所触发的事件,让他的父元素代替执行!

-------------------------------------------------------

连续英文换行

.content p{word-wrap:break-word;word-break:break-all;}

-------------------------------------------------------

5、

a:JS克隆对象,我也没答上来。。。原生JS太菜啊

网上搜索了一下,找到一个这样的函数:

function Object.prototype.cloneObj()

{

  function NEWOBJECT(){};

  NEWOBJECT. prototype = this;

  var anObj = new NEWOBJECT();

  for ( var ele in anObj )

  {

     if ( typeof anObj[ele] == “object” ) return anObj[ele]. cloneObj();

  }

  return anObj;

}

(没有看懂。。。)

b:这个消除数组里面重复的元素,我想到的就是双循环+判断来做的,当时的答案如下:

function getNewArr(oldArr){

if(typeof oldArr != "object") return oldArr;

var newArr = [];

var oldArrLen = oldArr.length-1, newArrLen = -1, flag = false;

for(var i=oldArrLen; i>=0; i--){

flag = false;

for(var j=newArrLen; j>=0; j--){

if(oldArr === newArr[j]){

flag = true;

break;

}

}

if(!flag) newArrLen = newArr.push(oldArr)-1;

}

return newArr;

}

var arr=[1,2,3,4,6,5,5,4,3,2,4,5,2,1,2,3,4,5,6];

function getNewArr(arr){

var obj={},newArr=[];

for(var i=0;i<arr.length;i++){

if(obj[arr[i]]!=arr[i]){

newArr.push(arr[i]);

obj[arr[i]]=arr[i];

}else{

obj[arr[i]]=arr[i];

}

}

return newArr;

}

console.log(getNewArr(arr));

这是我能想到的办法。。。其他的没想到。

-------------------------------------------------------

search() 方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串。

var str="Mr. Blue has a blue house"

var n=str.search(/blue/i);

document.getElementById("demo").innerHTML=n;

exec();

var r, re; // 声明变量。

var s = "The rain in Spain falls mainly in the plain";

re = /[\w]*(ai)n/ig;

r = re.exec(s);

alert(r);

时间: 2024-10-05 04:41:09

JS笔记的相关文章

Node.js笔记(0003)---Express框架Router模块学习笔记

这段时间一直有在看Express框架的API,最近刚看到Router,以下是我认为需要注意的地方: Router模块中有一个param方法,刚开始看得有点模糊,官网大概是这么描述的: Map logic to route parameters. 大概意思就是路由参数的映射逻辑 这个可能一时半会也不明白其作用,尤其是不知道get和param的执行顺序 再看看源码里面的介绍: Map the given param placeholder `name`(s) to the given callbac

# JS笔记(1)

 JS理论: 1.JavaScript是一个客户端脚本 ------工作在客户端的浏览器完成:相对应的PHP.ASP.NET .JSP 是一个服务端脚本. 2.JS可以插入到HTML中的任意一个位置,不过HTML解析式从上往下解析的,所以放在上面可能会找不到控件. 3.JS的特点: 脚本编程语言 基于对象的语言 由事件驱动 跨平台.依赖于浏览器.与操作环境无关 4.JS的作用: 表单的验证(放在客户端验证比较好)----可以减轻服务端的压力,并且用户体验感更好 页面的动态效果 动态改变页面的内容

node.js笔记——模块的开发

模块是什么? 简单来说模块是用来将实现某个功能的代码进行封装以便在其他项目中通过简单引入的方式实现模块中封装的功能的一个东西!!(我更想管他叫小程序). 模块的引入 模块的引入使用reqiure()函数来实现例如引入http模块 var h = require("http"); 这里需要注意的是require()加载函数可以加载指定的js文件,当引入的不是某个js文件而是一段没有扩展名的字符时,默认node.js会加载当前根目录下的node_modules文件夹下面的文件夹里的文件 并

node.js笔记——文件之间的引入

node.js的基础语法就是JavaScript的语法,所以对于懂得javascript的同学来说要容易一些,至于环境的配置也要相对简单很多,可以访问官方文档进行安装.这里分享一下我在学习中总结的一些东西,这是第一篇先来说说文件之间如何进行引入并互相使用变量及函数. 码缘»node.js笔记——文件之间的引入 http://www.ithome.ren/2017/05/31/node-js1.html

JS 笔记 17年

1, 可把字符串作为 URI 组件进行编码   encodeURIComponent(encodeURIComponent(6))   此为编码两次 encodeURIComponent() 函数将转义用于分隔 URI 各个部分的标点符号. escape()除了 ASCII 字母.数字和特定的符号外,对传进来的字符串全部进行转义编码,因此如果想对URL编码,最好不要使用此方法.而encodeURI() 用于编码整个URI,因为URI中的合法字符都不会被编码转换.encodeURIComponen

Node.js笔记(0001)---connect模块

首先来看这一部分代码 1 /** 2 * Created by bsn on 14-7-1. 3 */ 4 var connect = require('connect'); 5 6 var app = connect(); 7 function hello(req, res, next) { 8 console.log(req.url); 9 res.end('hello bsn'); 10 next(); 11 } 12 13 function helloAgain(req, res) {

[转载] Node.js 笔记(一) nodejs、npm、express安装

感谢原作者: http://blog.csdn.net/haidaochen/article/details/7257655 Windows平台下的node.js安装 直接去nodejs的官网http://nodejs.org/上下载nodejs安装程序,双击安装就可以了 测试安装是否成功: 在命令行输入 node –v 应该可以查看到当前安装的nodejs版本号 简单的例子写一段简短的代码,保存为helloworld.js,大致看下nodejs是怎么用的. 如下:该代码主要是创建一个http服

JS笔记 入门第二

输出内容 document.write() 可用于直接向 HTML 输出流写内容.简单的说就是直接在网页中输出内容 第一种:输出内容用""括起,直接输出""号内的内容 <script type="text/javascript"> document.write("I love JavaScript!"); //内容用""括起来,""里的内容直接输出. </script&

PPK谈JS笔记第一弹

以下内容是读书笔记,再一次温习JS好书:PPK谈JS window.load=initializePageaddEventSimple('window','load',function(){}) load事件在页面被完成加载时触发,显然这正是我们初始化脚本所需要的.问题是如果同时批量初始化,可能会发生替换,最后的赋值会替换前面的. js变量名,方法名等区分大小写使用分号作为语句分隔符注释是// /**/代码块使用{} undefined nullundefined:你访问了一个对象不存在的属性或

JS笔记 入门第四

小测试: 注意:取消所有的设定可以直接使用 document.getElementById("txt").removeAttribute("style"); 这个是个神奇的东西. <!DOCTYPE HTML> <html> <head> <meta http-equiv="Content-Type" Content="text/html; charset=utf-8" /> &