JS 创建对象的方法

本文详细介绍了JavaScript中创建对象的三种方式:对象字面量、工厂方法和构造函数。通过实例展示了它们的用法和区别,并探讨了构造函数的优化,包括方法的共享。同时,提到了使用`instanceof`操作符检查对象类型的用法。
摘要由CSDN通过智能技术生成

目录

1.1 对象字面量创建对象

2.1 工厂方法创建对象

3.1 构造函数

3.2 构造函数的修改


可以使用三种方式来创建对象,

        利用对象字面量创建对象,

        利用new Object创建对象,

        利用构造函数创建对象

1.1 对象字面量创建对象

使用对象字面量,可以在创建对象时,直接指定对象中的属性

语法:{属性名:属性值,属性名:属性值......}

{ }里面采取键值对的形式表示,

        键:相当于属性名

        值:相当于属性值,可以是任意类型的值(数字类型,字符串类型,布尔类型,函数类型

var obj = {

        name: "张三",

        sex:" 男",

        age:"24",

        test:{name='李四'} 

};

- 对象字面量的属性名可以加引号也可以不加引号,建议不加。

        如果使用一些特殊的名字,则必须要加引号 

- 属性名和属性值之间是一组一组的名值对结构

        名和值之间使用' : '相连接,多个名值对之间使用 , 隔开,

        如果一个属性之后没有其他的属性了,就不需要写' , '

- 对象内也可以嵌套对象,方法相同

2.1 工厂方法创建对象

对象字面量创建多个相同属性对象,需一个个复制粘贴修改,比较局限,可使用工厂方法创建对象

//采用工厂方法创建对象,可大批量创建对象
	function fun(name,age,gender){
		var obj=new Object();		
		obj.name=name;
		obj.age=age;
		obj.gender=gender;
		obj.sayName=function(){
			alert(this.name);
		}
		return obj;
	}

	var obj2=fun("张三",23,"男");
	var obj3=fun("李四",26,"男");	
	console.log(obj2);		//可显示对象内容
	console.log(obj3);
	obj3.sayName();			//可调用对象方法

注: 

        使用工厂方法创建的对象,使用的构造函数都是Object,所以创建的对象都是Object类型,无法区分多种不同类型的对象

3.1 构造函数

构造函数就是普通函数,创建方式和普通函数没有区别,不同的是构造函数习惯首字母大写,

构造函数和普通函数的区别就是调用方式的不同

        普通函数是直接调用,而构造函数需要使用new关键字来调用

构造函数的执行流程:

        1.立刻创建一个新的对象

        2.将新建的对象设置为函数中的this

        3.逐行执行函数中的代码

        4.将新建的对象作为返回值返回

使用同一个构造函数创建的对象,我们称为一类对象,也将一个构造函数称为一个类

        我们将通过一个构造函数创建的对象,称为是该类的实例

//创建一个构造函数,专门用来创建Person对象
	function Person(name,age) {
		this.name = name;
		this.age = age
	}
	function dog(name,age) {
		this.name = name;
		this.age = age
	}
	var per = new Person('张三',18);		//构造函数Person,传参
	var per1=new Person('李四',26);
	var per2 =new dog('旺财',2);		//构造函数dog
	console.log(per);
	console.log(per1);		
	console.log(per2);	
	console.log(per instanceof Person);
	console.log(per2 instanceof Person);	

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

        语法:对象 instanceof  构造函数

                如果是,则返回true,否则返回false. 

  附:   所有的对象都是Object的后代,所有任何对象和Object做instanceof检查时都会返回true

3.2 构造函数的修改

创建一个Person构造函数

        在Person构造函数中,为每一个对象都添加了一个sayName方法,目前我们的方法是在构造函数内部创建的,也就是构造函数每执行一次就会创建一个新的方法。

        这是完全没必要的,可以使所有对象共享同一个方法,即将方法放在全局作用域中,再引入到构造方法中

function Person(name,age) {
		this.name = name;
		this.age = age
		//原版,方法赘余
		// this.sayName =function(){		
		// 	console.log("我是"+name);
		// }
		this.sayName=fun;
	}
	
	function fun(){		//修改至外部
			console.log("我是"+name);
		}
	var per = new Person('张三',18);		//构造函数Person,传参
	var per1=new Person('李四',26);
	
	per.sayName();
	per1.sayName();

注:将sayName方法在全局作用域中定义,污染了全局作用域的命名空间,且定义在全局作用域中也很不安全

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值