javaScript学习

判断对象是否包含某属性

自身实例&原型链

存在于自身实例和原型链上的,均返回 true, 否则返回 false

  • instanceof

  • in

  • Object.prototype.isPrototypeOf(XXXX)

自身实例

只有来自自身对象,返回true,否则返回false

  • hasOwnProperty

获取实例对象所有属性

  • Object.getOwnPropertyNames(XXXX.prototype)

可参考《javascript高级程序设计》第六章

try catch throw

  • try 语句允许我们定义在执行时进行错误测试的代码块
  • catch 语句允许我们定义当 try 代码块发生错误时,所执行的代码块。
  • throw 创建自定义错误
1
2
3
4
5
6
7
function message() {
try {
noFun("123"); //这是一个不存在的函数
} catch (err) {
alert('本页面有有个错误:' + err.message);
}
}

自定义错误抛出例子:

1
2
3
4
5
6
7
8
9
10
function message() {
var y = document.getElementById('in').value;
try {
if (y == 3) throw '值不能等于3';
if (isNaN(y)) throw '应为数字';
if (y > 10) throw '值不能大于10';
} catch (err) {
alert(err); //与上面例子不一样,这里不需要加message
}
}

js验证

以下是表单验证例子,将验证内容包含在标签form里面。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
<html>
<head>
<script>
function validate_email(field, alerttxt) {
with(field) {
apos = value.indexOf('@');
dotpos = value.lastIndexOf('.')
if (apos < 1 || dotpos - apos < 2) {
alerr(alerttxt);
return false;
} else {
return true;
}
}
}
function validate_form(thisform) {
with(thisform) {
if (thisform) {
if (validate_email(email, "Not a valid e-mail address!") == false) {
email.focus();
return false;
}
}
}
}
</script>
</head>
<body>
<from action="submitpage.html" onsubmit="return validate_form(this);" method="post">
Email:<input type="text" name="email" size="30">
<input type="submit" value="Submit">
</from>
</body>
</html>

with 语句用于设置代码在特定对象中的作用域。可参考

关于arguments

类型

  • 非数组,不从 Array.prototype 继承。有属性 length, 但无其他数组有的属性,如 splice, concats
  • 非对象
  • 类数组对象:要让它使用数组的方法,可以用 call 或者 apply 的方法改变 this 去执行。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
function SecicalArray() {
typeof arguments; // object
Object.prototype.toString.call(arguments) // [object Arguments]
}
// 造一个类数组对象
var foo = {
0: 'Java',
1: 'Python',
2: 'Scala',
length: 3
}
console.log( Array.prototype.slice.call(foo)) // [ 'Java', 'Python', 'Scala' ]

JavaScript 创建对象的七种方式。

  • 工厂模式
  • 构造函数模式
  • 原型模式
  • 构造函数和原型组合模式
  • 动态原型模式
  • 寄生构造模式
  • 稳妥构造模式

JavaScript 继承

  • 接口继承:只继承方法签名
  • 实现继承:继承实际方法