使用环境:函数中的方法 是 通用的
文章目录
1、普通写法:函数中的方法
function Person(name) {
this.name = name;
this.funcs = function () {
console.log(this.name)
}
}
var per = new Person("测试");
var per1 = new Person("测试1");
console.log(per.funcs == per1.funcs) // 返回 false
缺点:运行一次函数,就会新创建一次方法,占内存
2、全局写法:函数中的方法 写法
function Person(name) {
this.name = name;
this.funcs = funcs
}
function funcs() {
console.log(this.name)
}
var per = new Person("测试");
var per1 = new Person("测试1");
console.log(per.funcs == per1.funcs) // 返回 true
优点:方法都是指向的一个方法,提高性能,减少内存
缺点:污染全局作用域命名空间,不安全,容易误改
3、原型写法:函数中的方法 写法
function Person(name) {
this.name = name;
}
// 原型
Person.prototype.funcs = function () {
console.log(this.name)
}
var per = new Person("测试");
var per1 = new Person("测试1");
//指向一个方法
console.log(per.funcs == per1.funcs) // 返回 true
// 对象属性继承 父级(prototype)的属性
console.log(Person.prototype.funcs == per.funcs) // 返回 true
// 构造函数的 隐含对象 指向 父级(prototype)的属性
console.log(Person.prototype.funcs == per.__proto__.funcs) // 返回 true
优点:方法都是指向的一个方法,提高性能,减少内存,安全不污染
原理:
- 创建的每个函数,都有一个 属性 prototype ,这个属性对应一个对象,称为 原型对象
- 通过 相同函数创建的对象 都可以 访问 prototype 属性(就相当于 这个 函数的 父级)
- 构造函数调用时,创建的新对象有一个 __proto__隐含对象,__proto__对象指向 prototype 对象
- 新对象的属性 继承 prototype 的属性