创建对象的三种方式

创建对象的方式有三种

  1. 调用系统的构造函数创建对象
var 变量名= new Object(); Object 是系统的构造函数
  1. 自定义构造函数创建对象(结合第一种和需求通过工厂模式创建对象)
  2. 字面量的方式创建对象

一、调用系统构造函数创建对象

//实例化对象
var obj = new Object();
	//对象有特征(属性)和行为(方法)

	//添加属性	对象.名字=值;
	obj.name = "小杨";
	obj.age = 25;
	obj.sex = "男"
	//添加方法	对象.名字=函数;
	obj.eat = function() {
		console.log("我喜欢吃土豆牛肉辣椒");
	};
	obj.play = function() {
		console.log("我喜欢跑步,打篮球,打乒乓球")
	}
	obj.cook = function() {
		console.log("洗菜")
		console.log("切菜")
		console.log("下锅")
		console.log("放料")
		console.log("出锅")
		console.log("吃")
	}
	console.log(obj.name);
	console.log(obj.age);
	console.log(obj.sex);
	obj.eat();
	obj.play();
	obj.cook();

二、自定义构造函数创建对象

// 自定义构造函数创建对象,需要自定义一个构造函数,然后才能创建对象
	//函数和构造函数的区别是:构造函数的首字母是大写的,函数的首字母是小写的
	function Person(name,age){//自定义构造函数
		this.name=name;
		this.age=age;
		this.sayHi=function(){
			console.log("我叫:"+this.name+",今年"+this.age+"岁");
		};
	}
	
	//通过自定义的构造函数来创建对象
	var arr= new Person("社会王",18);
	console.log(arr.name);
	console.log(arr.age);
	arr.sayHi();

自定义构造函数创建对象的时候,发生了四件事
1. 在内存中开辟空间(申请一块内存),来存储创建的新的对象
2. 把this设置为当前的对象
3. 设置对象的属性和方法值
4. 把this这个对象返回

2.1工厂模式创建对象

如何获取该变量(对象)是不是属于什么类型

语法:
变量 instanceof 类型的名字----->输出是布尔类型,true表示是这个类型,false表示不是这个类型
在当前的对象的方法中,可以用this关键字代表当前的对象

			//人的对象
			var person = new Object();
			person.name = "小黑";
			person.age = 20;
			person.sayHi = function() {
				console.log("你好,我在吃饭,我叫:" + this.name); //在当前的对象的方法中,可以用this关键字代表当前的对象
			};
			person.sayHi()

			console.log(person instanceof Object); //instanceof判断是不是这个类型,输出值为布尔类型

			// 把创建对象的代码封装到一个函数里面,可以一次性创建多个对象
			// 工厂模式创建对象
			function createObject(name, age) {
				var obj = new Object(); //创建一个对象

				//给对象添加属性
				obj.name = name;
				obj.age = age;
				//给对象添加方法
				obj.eat = function() {
					console.log("你好,我叫:" + this.name + "今年" + this.age + "岁");
				}
				return obj;
			}
			var students=createObject("社会王", 22);
			students.eat();

三、字面量方式创建对象

//字面量方式创建对象
			var obj={};//空对象
			//添加属性
			obj.name="小白";
			obj.age=8;
			obj.sayHi=function(){
				console.log("我是哮天犬");
			};
			
			obj.sayHi();
			console.log(obj.age);



 			var a = "1";
		  	var tObj = {
		     a : "2",
		   
		     tFunc : function (){
		       var a = "3";
		       alert(this.a)
		     }
		   
		   }
		   
		   tObj.tFunc();
		   
			// 字面量的方式创建对象的缺陷:一次性的对象
			var obj2={
				name:"小明",
				age:"8",
				sex:"女"
				
			};
			obj2.name="柯南";
			console.log(obj2.name);
			//点语法:	对象.名字=值;	对象.名字=函数;	没有什么点什么就有了
			

区别

  • 共同点

都是函数,都可以创建对象,都可以传入参数

  • 不同点:

工厂模式:
函数名是小写
有new,
有返回值
new之后的对象是当前的对象
直接调用函数就可以创建对象

自定义构造函数:
函数名是大写(首字母)
没有new
没有返回值
this是当前的对象
通过new的方式来创建对象

总结

js是一门什么样的语言 是一门解释性语言 是一门脚本语言 是一门弱类型的语言,声明变量都用var 是一门基于对象的语言
是一门动态类型的语言:

  1. 代码(变量)只有执行到这个位置的时候,才知道这个变量中到底存储了什么,如果是对象,就有对象的属性和方法,如果是变量,就是变量的作用
  2. 对象没有什么,只要点了,通过点语法,那么就可以为对象添加属性或者方法
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值