javascript高级程序设计笔记-1

1、ECMAScript不存在块级作用域。
如图,i仍然可以访问到。
2、ECMAScript没有函数签名,所以没有重载。
3、
4、可以给对象动态添加属性,不能给基本类型的值添加属性。
5、函数的参数只能按值传递
6、变量的值是对象或者null,则typeof操作符会返回object。
7、
子执行环境向上搜索作用域链,即内部环境可以通过作用域链访问外部环境。反之不可以。
8、延长作用域链的情况:
9、javascript没有块级作用域
10、访问属性一般推荐使用点表示法
11、
12、concat()
slice()
splice()
13、
14、
使用不带圆括号的函数名是访问函数指针。
15、
concat()
slice()
substring()
substr()
16、所有代码执行之前,作用域就已经存在两个两个内置对象:Global和Math。web浏览器实现了承担global对象角色的window对象。
17、读取属性的特性 Object.getOwnPropertyDescriptor()
18、
19、
创建自定义类型的方法,定义引用类型的一种推荐模式: 组合使用构造函数模式和原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
this.friends = ["lucy","lily"];
}
Person.prototype= {
constructor: Person;
sayName:function(){
alert(this.name);
}
}
var person1 = new Person("WeiHanying",23,"Software Engineer");
var person2 = new Person("WuQingfeng",34,"Singer");

person1.friends.push("XiaoBai");
alert(person1.friends);//lucy,lily,xiaobai
alert(person2.friends);//lucy,lily
alert(person1.friends === person2.friends);//false
alert(person1.sayName===person2.sayName);//true
20、
动态原型模式
function Person(name,age,job){
this.name = name;
this.age = age;
this.job = job;
if(typeof this.sayName != "function"){
Person.prototype.sayName = function(){
alert(this.name);
};
}
}
var friend = new Person("aa",22,"Software Engineer");
friend.sayName();
使用动态原型模式时,不能使用对象字面量重写原型。因为如果在已经创建了实例的情况下重写原型,会切断现有的实例和新原型之间的联系。
21、
寄生构造函数模式
function Person(name,age,job){
var o = new Object();
o.name = name;
o.age= age;
o.job = job;
o.sayName = function(){
alert(this.name);
};
return o;
}
var friend = new friend("Why",22,"Software Engineer");
friend.sayName();

稳妥构造函数模式
与寄生构造函数的区别:一是新创建对象的实例方法不引用this,二是不适用new 操作符调用构造函数
function Person(name,age,job){
var o = new Object();
//可以在这里定义私有变量和函数
o.sayName = function(){
alert(name);
};
return o;
}
22、
关于原型
23、
JavaScript中最常用的继承模式: 组合继承,它融合了原型链和构造函数的优点。
function SuperType(name){
this.name = name;
this.colors = ["red","blue","green"];
}
SuperType.prototype.sayName = function(){
alert(this.name);
};
function SubType(name,age){
SuperType.call(this,name);
this.age = age;
}
SubType.prototype = new SuperType();
SubType.prototype.sayAge = function(){
alert(this.age);
};
24、 寄生组合式继承--------------还需要进一步理解
25、如果闭包的作用域链中保存着一个html元素,那么就意味着该元素将无法被销毁
26、
JavaScript没有块级作用域
如图,在一般java等语言中,变量i只会在for循环语句块中有定义,循环结束i就销毁了。但是在JavaScript中,变量i是定义在整个函数的活动对象中的。因此从它有定义开始,就可以在函数内部随处访问,即使重复声明同一个变量,也阔以。不过可以用匿名函数来模仿块级作用域。
27、
私有作用域,示例:
(function(){
var now = new Date();
if(now.getMonth()==0 && now.getDate()==1){
alert("Happy New Year!");
}
})();
把上面这段代码放在全局作用域中,用来向用户祝贺新年快乐。变量now是匿名函数的局部变量,不必在全局作用域创建它。
28、
静态私有变量,注意MyObject声明为全局变量的关键之处。
29、
模块模式 和 增强的模块模式    -------还需要进一步深入理解。
30、递归函数应该始终使用arguments.callee来递归地调用自身,不要使用函数名——因为函数名可能发生变化。
----------------------------------------------------------------------------------------------------------------------------------------------------------------------
额 图片直接复制不可以,先在Evernote里存着了==
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值