js 函数中方法定义在函数内部,定义在函数外,与prototype上的区别
- 区别
方法 | 调用 | 描述 |
---|---|---|
构造函数内 | 函数名直接调用 | 报错 |
函数外 | 函数名直接调用 | 正常执行 |
函数外 prototype上 | 函数名直接调用 | 报错 |
构造函数内 | 实例化对象调用 | 正常执行 |
函数外 | 实例化对象调用 | 报错 |
函数外 prototype上 | 实例化对象调用 | 正常执行 |
在函数内用this定义的方法,只能用实例化对象来调用
在函数外定义的方法,只能用构造函数调用
在函数外 prototype上定义的方法,只能用实例化对象来调用。
this定义的方法,与prototype上的方法的区别是 this的方法,可以访问到函数内的私有变量
<script>
//首先创建一个函数
function Person(name, age) {
this.name = name;
this.age = age;
this.write = function () {
console.log('hello function');
}
}
Person.write1 = function () {
console.log('hello jq')
}
Person.prototype.write2 = function () {
console.log('告辞 node.js');
}
//现在来验证
//首先Person直接调用三个方法
// Person.write(); //× 报错
// Person.write1(); //hello jq
// Person.write2(); //× 报错
//然后用对象的实例来调用这三个方法
let a = new Person();
a.write(); // hello function
// a.write1(); //× 报错
a.write2(); //告辞 node.js
</script>