《精通JavaScript》读书笔记
1.使用构造函数属性来判断对象的类型
//检查数字实际上是否为字符串if (num.constructor == String) { //如果是,则把字符串解析为整数 num = parseInt(num);}//检查字符串实际上是否为数组if (str.constructor == Array) { //如果是,则根据数组用逗号归并出字符串来 str = str.join(',');}
2.变量的类型检查
变量
typeof变量
变量.构造函数
{an:"object"}
object
Object
["an","array"]
object
Array
function(){}
function
Function
"a string"
string
String
55
number
Number
true
boolean
Boolean
new User()
object
User
3. 用闭包实现的函数Curry化
//数字求和函数的函数生成器function addGenerator(num) { //返回一个简单的函数,求两个数字的和,其中第一个数字来自生成器 return function (toAdd) { return num + toAdd }}//addFive现在包含一个接受单一参数的函数,这个函数能求得5加上该参数的和var addFive = addGenerator(5);console.log(addFive(4));//输出9
4.使用匿名函数来隐藏全局作用域变量
(function(){ //变量原本应该是全局的 var msg = "test"; //将一个新函数绑定到全局对象 window.onunload = function(){ //这个函数使用了隐藏的msg alert(msg); }; //关闭匿名函数并执行})();
5.使用匿名函数来激发出创建多个使用闭包的函数所需的作用域
//一个ID为main的元素var obj = document.getElementById("main");//用于绑定一个数组var items = ["click", "keypress"];//遍历数组的每个成员for (var i = 0; i 私有方法和私有变量只允许其他的私有方法、私有变量和特权方法访问。这种方法可以定义一些只让对象内部访问,而外部访问不到的代码。
//表示教室的一个对象构造函数
function Classroom(students, teacher) {
//用于显示所有班上学生的私有方法
function disp() {
alert(this.names.join(","));
}
//将班级数据存入公共对象属性中this.students = students;this.teacher = teacher;//调用私有方法来显示错误disp();
}
//创建一个新的classroom对象
var c = new Classroom(["John", "Bob"], "Mr. Smith");
//调用disp方法会失败,因为它不是该对象的公共属性
c.disp();
## 11.特权方法特权方法用来指代哪些在查看并处理私有变量的同时允许用户以公共方法的方式访问的方法。
//创建一个新的User对象构造函数
function User(name, age) {
//尝试算出用户出生的年份
var year = (new Date()).getFullYear() - age;
//创建一个新的特权方法,能够访问year变量,同时自身属于公共可访问的this.getYearBorn = function () { return year;}
}
//创建User对象的一个新示例
var user = new User("Bob", 44);
//验证返回的年份正确
alert(user.getYearBorn() == 1962);
//注意我们无法访问该对象私有的年份属性
alert(user.year == null);
## 12.静态方法静态方法的实质与任何其他一般函数没有什么不同,最主要的区别在于,其他函数是以对象的静态属性形式存在的。作为一个属性,它们不能在该对象的实例的上下文中访问,而只属于主对象本身的那个上下文中。
//添加到一个User对象的静态方法
User.clnoeUser = function (user) {
//创建并返回一个新的用户
return new User(user.getName(), user.getAge());
};
## 13.原型式继承的例子
//为Person对象创建一个构造函数
function Person(name) {
this.name = name;
}
//给Person对象添加一个新方法
Person.prototype.getName = function () {
return this.name;
};
//创建一个新的User对象的构造函数
function User(name, password) {
//注意,这里并没有支持方法的重载/集成,也就是说,不能调用父类的构造函数
this.name = name;
this.password = password;
}
//User对象继承所有Person对象的方法
User.prototype = new Person();
//我们添加一个新方法到User对象中
User.prototype.getPassword = function () {
return this.password;
};
## 14.JavaScript中的命名空间化及其实现
//创建一个默认的、全局的命名空间
var YAHOO = {};
//使用对象设置一些子命名空间
YAHOO.util = {};
//创建最终命名空间,它包含一个值为函数的属性
YAHOO.util.Event = {
addEventListener: function () {
}
};
//调用某个具体命名空间中的函数
YAHOO.util.Event.addEventListener();
#JavaScript#
版权声明
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处。如若内容有涉嫌抄袭侵权/违法违规/事实不符,请点击 举报 进行投诉反馈!