为什么80%的码农都做不了架构师?>>>   

Javascript cha5 引用类型

0 planning and update

1 希望学习基本引用, object, function; 其他的部分可以晚些时候再弄。 2 然后要看面向对象和匿名函数

1 Object 类型

两种定义Object 的方法

第一种 直接new

var person = new Object();
person.name = "Nick";
person.age =17;
alert(person);

第一行也可以替换成这个 var person ={};

第二种 对象字面量表示法。

var person = {name : "lily",age: 16
};
alert("person: " + person);

注意, 每个attr 后面是逗号; 最后一个attr 没有逗号; 最后面需要一个分号。 下面一个例子是如何用来向函数传递大量参数, 以及对每种参数如何处理的问题。

function display(args){var output ="";if(typeof args.name == "string"){output+=args.name;}if(typeof args.age == "number"){output+=args.age;}alert(output);
}display({name:"nick",age:18
});display({name:"greg"
});

2 Array

3 Date

4 RegExp

5 Function

这是很有趣的一个章节。 这个是cha3的延续。
函数是对象。 这个是java 不同。 函数名其实是指向函数对象的一个指针, 不会与函数本身绑定

1 如何初始化函数, 两种方式以及区别。

两种做法,
一种函数声明语法, 一种是函数表达式定义, 最后需要一个分号告诉大家赋值结束了。
两种从功能上没有区别, 除了一个先后的问题。

  • 比如说函数声明语法定义的, 你也可以把sum 赋值给另外一个对象。
function sum(num1, num2){return num1 + num2;
}
alert(sum(10, 20));//30
var sum2= function(num1, num2){return num1+num2;
};
alert(sum2(10, 20));//30
var sum3= sum;
sum=null;
alert("sum3: " + sum3(10,30));

注意

  • 函数名不加括号是指的指针, 而不是要调用函数。 这点很重要。 后面比如返回函数等都是返回指针。

区别

  • 还是有些微的区别的。 如果你用的是函数声明, 那么你无论放在那里, 调用都是可以找到的。 就是说可以先调用, 后定义。 因为这个声明会在执行前就调用一下。
  • 如果用的函数表达式, 这个是赋值操作,要在执行的时候调用。 你需要确保先定义再调用, 否则会找不到定义。

2 关于重载 - 没有

1) 我觉得是javascript 函数是不区分输入参数的, 不写, 写区别不大。 那么你写两次不会有根据参数不同来调用不同函数的行为。 所以没有重载。
2) 因为函数是对象, 函数名其实是个指针。 那么如果你有两次定义, 后面的定义就把第一次的覆盖掉了。

  • 这是书上的解释,这个是也有助于理解没有重载, 因为函数是对象, 而函数名是指针。 那么你函数名如果一样就意味着是指向了新的对象。 自然不会有重载的概念。

3 作为值的函数

可以作为参数, 也可以作为返回值。 这个才是function 最有趣的地方。

注意1 如果函数不带括号, 传递的是函数的指针, 也就是这个函数; 如果带括号, 传递的是这个函数的计算后的结果。

  • 三个例子, 一个是作为参数, 一个是作为返回, 一个是用错了括号。

ex1

//method is as the input parameter
function callSomeFunction(functionname, argument1){return functionname(argument1);
}function add10(num1){return num1+10;
}var result =  callSomeFunction(add10, 15);
alert("result: " + result);

ex2:

//method is as the return
function createComparationFunction(parameter){return function(obj1, obj2){var value1= obj1[parameter];var value2= obj2[parameter];if( value1 > value2){return 1;}else if(value2 > value1){return -1;}else{return 0;}};
}
var listName = [{name: "lily", age: 34}, {name: "nick", age: 27}];
listName.sort(createComparationFunction("name"));
alert(listName[0].name);//lily, because l is ahead of n
listName.sort(createComparationFunction("age"));
alert(listName[0].name);//nick, because 27>34

ex3:

//test about functionname and ()
var result =  callSomeFunction(add10(), 15);   //error:TypeError: functionname is not a function
alert("result: " + result);

4 函数的内部属性:arguments, this

首先一个例子是说arguments,

廖的教程中好像看到过,说这个是赠送的属性。 :)

这个例子其实发生的几率不高。 你定义了一个函数, 这个函数内部也引用了这个函数名。 如果外面这个函数名指向了不同的函数, 你再调用原来的函数(当然你肯定已经复制给了一个函数名), 你可能得不到你想要的结果。 除非你改成 arguments.callee(num-1)。

就是一个练习。

//opt1
function fib(num){if (num<=1){return 1;}else{return num+fib(num-1);}
}
alert("fib 10: " + fib(10)); //55// verify
fib2= fib;
fib=function(){return 0;
};
alert("fib2 10: " + fib2(10)); //10//opt2
function fib_true(num){if (num<=1){return 1;}else{return num+ arguments.callee(num-1);}
}
alert("fib_true 10: " + fib_true(10)); //55
// verify
fib2_true= fib_true;
fib_true=function(){return 0;
};
alert("fib2_ture 10: " + fib2_true(10)); //55
下面是说this

this 是一个很有趣的例子。 指的是执行环境, 在不同的情况是不同的指向。 需要仔细揣摩。

window.color = "red";
var o = {color: "blue"};function sayColor(){alert(this.color);
}// alert(sayColor);//function all
sayColor(); //redo.sayColor = sayColor;
// sayColor();
o.sayColor(); //blue

第一个saycolor, 是 this 是windows。 所以是red。 第二个saycolor, 是在o里面, o 这个对象呢, 既有属性color, 也有一个函数saycolor。

5 函数属性和方法

函数是对象, 那么它就有属于自己的属性和方法。 这里讨论一下它默认的属性和方法。

属性, length, prototype

length 标识函数希望接收的命名参数的个数。 prototype 后面再讨论吧。

方法 call apply

还是很有用的呢。 作用1, 可以传递参数; 作用2, 可以扩充函数作用域。

传递参数, apply 参数是arugument 或者数组。 而call 则必须每个都列出来。 如果都不列就不用就是了。

function sum(num1, num2){return num1 + num2;
}
function sum_apply1(num1, num2){return sum.apply(this, arguments);
}
function sum_apply2(num1, num2){return sum.apply(this, [num1, num2]);
}
alert(sum_apply1(10, 20));
alert(sum_apply2(10, 20));function sum_call(num1, num2){return sum.call(this, num1, num2);
}
alert(sum_call(10, 20));

关于扩充作用域。 如下。

//this
window.color = "red";
var o = {color: "blue"};function sayColor(){alert(this.color);
}sayColor(); //redsayColor.apply(this); //red
sayColor.apply(window); //red
sayColor.apply(o); //blue

Q 1 如何打印一个对象的参数和函数。 2

6 基本包装类型

7 内置对象

转载于:https://my.oschina.net/sizhe/blog/849837

Javascript 高级程序设计笔记 (cha5 引用类型)相关推荐

  1. Javascript高级程序设计——基本类型和引用类型的值

    ECMAScript中的变量有两种不同的数据类型的值: 基本类型:基本类型的值是简单的数据段.包括:Undefined.Null.Number.Boolean.String五种 引用类型:引用类型的值 ...

  2. javascript高级程序设计--笔记01

    概述 JavaScript的实现包含三个部分: 1  核心(ECMAScript)   提供核心语言功能 2  文档对象模型(DOM)  一套提供了访问以及操作网页内容的API 3  浏览器对象模型( ...

  3. JavaScript高级程序设计笔记 - 第四章 变量 作用域 内存问题

    4.1 基本类型和引用类型的值 基本类型: 简单的数据段 引用类型: 指那些可能有多个值构成的对象, 指保存在内存中的对象 4.1.2 复制变量值 除了保存的方式不同之外,在从一个变量向另一个变量复制 ...

  4. JavaScript高级程序设计笔记01 | 第一章到第四章 | 关键字与保留字 | 数据类型 | 操作符 | 作用域

    观前提示:大部分都是书上的内容,个人理解的部分的较少,看我的笔记还不如去看书 第二章 async:可选.表示应该立即下载脚本,但不应妨碍页面中的其他操作,比如下载其他资源或 等待加载其他脚本.只对外部 ...

  5. javascript高级程序设计笔记

    1.要讲一个值转换成其对应的Boolean类型 ,可以调用转型函数Boolean(). var message="hello world!"; var messageAsBoole ...

  6. JavaScript高级程序设计笔记 事件冒泡和事件捕获

    1.事件冒泡 要理解事件冒泡,就得先知道事件流.事件流描述的是从页面接收事件的顺序,比如如下的代码: <body><div> click me!</div> < ...

  7. 《javascript高级程序设计》笔记:内存与执行环境

    上一篇:<javascript高级程序设计>笔记:继承 近几篇博客都会围绕着图中的知识点展开 由于javascript是一门具有自动垃圾收集机制的编程语言,开发者不必担心内存的分配和回收的 ...

  8. 读书笔记(06) - 语法基础 - JavaScript高级程序设计

    写在开头 本篇是小红书笔记的第六篇,也许你会奇怪第六篇笔记才写语法基础,笔者是不是穿越了. 答案当然是没有,笔者在此分享自己的阅读心得,不少人翻书都是从头开始,结果永远就只在前几章. 对此,笔者换了随 ...

  9. JavaScript高级程序设计(读书笔记)(六)

    本笔记汇总了作者认为"JavaScript高级程序设计"这本书的前七章知识重点,仅供参考. 第六章 面向对象的程序设计 面向对象(Object-Oriented, OO)的语言有一 ...

  10. JavaScript高级程序设计学习笔记(三)

    分享一下第五章(引用类型)的笔记,内容比较多,我拆成了两部分,今天这部分是关于Object.Array.Date和RegExp类型的. 以下的笔记是书上一些我以前学习的时候,没有太重视的js基础知识, ...

最新文章

  1. GDC-Client使用
  2. 纯正价格正则表达式,请指正
  3. QueryBuildRange中的表达式
  4. LeetCode 2136. 全部开花的最早一天(贪心)
  5. HTML5中Nav元素作用及应用场景知识点
  6. 数据结构 2-3-3 循环链表
  7. GinaBackDoor简单实现
  8. 创建表 备注 修改表结构 修改约束
  9. 网站建设解决了传统的销售模式
  10. 3dmax2022序列号 附使用说明
  11. 搭建企业级微信公众号管理平台(三)----注册码实现与校验,Redis存储
  12. ixigua解析_西瓜视频地址解析
  13. 小白记录第一个Android APP,VS2019,Xamarin,C#
  14. 看涨期权计算函数实现(Python)
  15. Android 仿钉钉、微信 群聊组合头像,Android插件化入门指南
  16. python像素鸟游戏
  17. User-Agent(用户代理)是什么
  18. 转:solr 从数据库导入数据,全量索引和增量索引(实例配置原理)
  19. GNU的C++代码书写规范,C语言之父Dennis Ritchie亲自修订 (转)
  20. 计算机专业教语文,中职计算机专业语文信息化教学应用

热门文章

  1. flutter环境配置详解及开发第一个项目
  2. 灯效控制器和rgb控制器_送老婆一个RGB全家桶PC,试试钱都花在光效上的感觉是怎样的...
  3. 学科实践活动感悟50字_连江县高中综合实践活动学科马春晖名师工作室开展送教送培活动...
  4. 删除web项目服务器,删除 Tomcat-webapps 目录自带项目【测试可行】
  5. Xcode给应用签名的设置
  6. 为什么人很难承认自己的错误?
  7. 作为开发人员,U盘32G太小了,256G才够用
  8. 解决办法:undefined reference to symbol '_ZTVN10__cxxabiv117__class_type_infoE@@CXXABI_1.3
  9. 娟红静敏,从女孩子名中可以看出什么
  10. 使用jpeglib直接把NV12转为jpeg文件的代码