0
点赞
收藏
分享

微信扫一扫

js基础学习 —— 原型对象

使用环境:函数中的方法 是 通用的

文章目录

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

优点:方法都是指向的一个方法,提高性能,减少内存,安全不污染
原理:

  1. 创建的每个函数,都有一个 属性 prototype ,这个属性对应一个对象,称为 原型对象
  2. 通过 相同函数创建的对象 都可以 访问 prototype 属性(就相当于 这个 函数的 父级
  3. 构造函数调用时,创建的新对象有一个 __proto__隐含对象,__proto__对象指向 prototype 对象
  4. 新对象的属性 继承 prototype 的属性
举报

相关推荐

0 条评论