javascript构造函数

本文解析了构造函数与普通函数的区别,强调了构造函数在创建对象实例时的特殊作用,详细介绍了构造函数的执行流程,包括创建新对象、设置this指向、执行代码和返回对象。同时,探讨了构造函数中this的使用,以及如何通过优化避免每次执行构造函数时重复创建相同的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

构造函数和普通函数的区别就是调用的不同,普通函数直接调用,构造函数使用new关键调用,并且构造函数首字母一般大写。

   构造函数的执行流程:
        1、立即创建一个新的对象
        2、将新建对象设置为函数的this,在构造函数中可以使用this引用对象
        3、按顺序执行函数的代码
        4、将对象作为函数返回值返回

	<script type="text/javascript">
		//构造函数
		function Person(){
			alert("test");
		}

		var per = new Person();
		console.log(per);
	</script>

构造函数中this的使用

	<script type="text/javascript">
		//构造函数和普通函数的区别就是调用的区别,并且首字母一般大写
		//构造函数的执行流程
		//1、立即创建一个新的对象
		//2、将新建对象设置为函数的this,在构造函数中可以使用this引用对象
		//3、按顺序执行函数的代码
		//4、将对象作为函数返回值返回
		//
		function Person(name,age,gender){
			this.name = name;
			this.age = age;
			this.gender = gender;
			this.setName = function(){
				alert(this.name);
			}
		}

		var per1 = new Person("悟空",18,"男");
		var per2 = new Person("八戒",18,"男");
		var per3 = new Person("沙和尚",18,"男");
		per1.setName();
		per2.setName();
		per3.setName();
	</script>

构造函数也称为,通过构造函数创建的对象成为类的实例

使用instanceof关键字可以检查一个对象是否是一个类的实例

例:per1 instanceof Person    //检查per1对象是否是Person的一个实例,是返回true,不是返回false

问题:构造函数每执行一次,就会创建一个新的方法。执行一万次就会有一万个功能相同但独立的方法。

	<script type="text/javascript">
		function Person(name,gender,age){
			this.name = name;
			this.gender = gender;
			this.age = age;
			this.setName = function(){
				alert(this.name);
			}
		}
		per1 = new Person("张三","男",18);
		per2 = new Person("李四","男",18);
		alert(per1.setName == per2.setName);  //flase,setName是独立的方法
	</script>

优化:

方法一:将方法放在全局中定义。缺点是污染全局变量且不安全

	<script type="text/javascript">
		function Person(name,gender,age){
			this.name = name;
			this.gender = gender;
			this.age = age;
			this.setName = setName;
		}
		function setName(){
				alert(this.name);
		}
		per1 = new Person("张三","男",18);
		per2 = new Person("李四","男",18);
		alert(per1.setName == per2.setName);  //true,setName是全局定义的函数
	</script>

方法二:将共有的属性和方法统一放在公共区域prototype原型中

想了解原型请戳:详谈prototype和__proto__原型

<script>		
              function Person(name,gender,age){
			this.name = name;
			this.gender = gender;
			this.age = age;
		}

		//原型prototype
		Person.prototype.setName = function(){
			return this.name;
		}

		per1 = new Person("张三","男",18);
		per2 = new Person("李四","男",18);
		alert(per1.setName());  //1
                alert(per1.__proto__.setName());  //2
</script>

 

this的情况:

1、当以函数的形式调用时,this是window

2、当以方法的形式调用时,谁调用方法this就是谁

3、当以构造函数的形式调用时,this就是新创建的那个对象

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值