先直接贴代码, 一目了然
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title></title>
<script>
// [1], 使用 构造方法 创建 一个TestObj 对象
function TestObj(x, y) {
this.x = x;
this.y = y;
}
// [2.1], 给对象 TestObj 添加一个 不加 prototype 的方法
TestObj.xxx = function() {
alert("xxx");
}
// [2.2], 给对象 TestObj 添加一个 添加 prototype 的方法
TestObj.prototype.yyy = function() {
alert("yyy");
}
// [3], 测试
function test() {
// [3.1], 实例化一个 TestObj 对象
var y1 = new TestObj("11", "22");
// [3.1.1], 不加 prototype 属性的 方法, 有点类似 java中的静态方法, 直接通过 对象调用
// y1.xxx("111111"); // 报错
TestObj.xxx("111111");
// [3.2], 实例化一个 TestObj 对象
var x1 = new TestObj("11", "22");
// [3.2.1], 加了 prototype 属性的方法, 有点类似java中的成员方法, 需要先实例化后, 才能使用
x1.yyy("222222");
// TestObj.yyy("222222"); // 报错
}
</script>
</head>
<body οnlοad="test()">
</body>
</html>
通过代码测试, 我们得出结论:
A. 使用 prototype字段的方法相当于Java中的实例方法,实例化即(必须new)后才能使用
B. 不使用prototype字段的方法相当于java中的静态方法,通过对象名可以直接使用,不需要实例化