对象¶
如果变量未声明直接赋值,则直接赋值,则会直接声明一个全局变量,并且为windows对象所有
num = 100;
全局声明的变量,为windows对象所有
var a = 20;
console.log(window.a);
对象¶
JavaScript没有像许多面向对象的语言一样有用于创建class类的声明。JavaScript 用一种称为构造函数 的特殊函数来定义对象和它们的特征。
构建函数提供了创建您所需对象(实例)的有效方法,将对象的数据和特征函数按需联结至相应对象。
function Person(name) {
this.name = name;
this.greeting = function() {
console.log("Hi! I'm " + this.name + ".");
};
}
var person1 = new Person('Bob');
var person2 = new Person('Sarah');
this表示当前对象。
new 来创建对象。
隐式返回 this 对象。
构造函数约定首字母大写(非强制)。
一种常见的对象定义模式是,在构造函数(函数体)中定义属性、在 prototype 属性 上定义方法。如此,构造器只包含属性定义,而方法则分装在不同的代码块,代码更具可读性。例如
// 构造器及其属性定义
function Ract(a,b,c,d) {
// 属性定义
};
// 定义第一个方法
Ract.prototype.x = function () { ... }
// 定义第二个方法
Ract.prototype.y = function () { ... }
通过Object创建对象
var obj = new Object()
obj.name = "bjbook"
obj.age = "19"
继承¶
原型链
this¶
全局作用域this代表window.
call/apply改变this指向。
obj.fn(),则 fn里面的this代表obj。
with¶
with改变程序执行的上下文
with (document){
write("hello world");
write("hello beijing");
}
ES5.0的严格模式下不能使用,因为可能影响性能。例如以下情况 ::
with (document){
write("hello world");
write("hello beijing");
}
arguments¶
arguments表示函数的参数列表。
length 参数个数。
callee 函数本身,指向参数的函数的引用。
caller, 被调用的函数。不建议使用该特性。
例如立即执行函数, 如果有递归调用,可以使用callee来进行递归调用。
- function test(){
console.log(arguments.callee); function demo(){
console.log(arguments.callee);
} demo();
} test();
try…catch¶
try…catch语句标记要尝试执行的语句块,并指定捕获一个出现异常,然后进行 相应处理。try内部代码不再执行,不影响后续代码的执行。
try {
console.log("hello");
console.log(a);
console.log("world");
}catch(e)
{
console.log(e.name + ":" + e.message);
}
console.log("beijing")
错误类型¶
1, Reference Error
ES5.0¶
ES5.0的全称为ECMAScript 5, 它是ES3.0的后续版本。
ES5.0默认和ES3.0兼容, 但它有一个严格模式,限制了ES3.0的某些语法。
严格模式用于消除Javascript语法的一些不严谨的地方,减少一些编程的怪异用法。
严格模式,使用”use strict” 指令,必须在全局或函数的第一条语句定义’use strict’。
不能使用未声明的变量,即变量必须加关键字var 进行声明。
自定义的函数中的this默认为undefiled, 非严格模式默认为window.
不能使用arguments的callee,caller等属性。
不能使用with语句。
不允许删除函数。
// todo 举例。