10-编程思想/创建对象的三种方式/工厂模式创建对象

1 编程思想

/**
	 *编程思想:把一些生活中做事的经验融入到程序中
	 *面向过程:凡事都亲力亲为 每件事的具体过程都要知道 注重的是过程
	 *面向对象:根据需求找对象 所有的事情都用对象来做 注重的是结果
	 *
	 *
	 *面向对象特性:封装 继承 多态(抽象性)
	 *js不是面向对象的语言,但是可以模拟面向对象的思想
	 *js是一门基于对象的语言:
	 *万物皆对象-------->狗 人 
	 *
	 *
	 *什么是对象?
	 *看得见 摸得到 具体特指的某个东西
	 *
	 *找对象
	 *描述对象
	 *文字描述找对象
	 *小明牵着小狗去逛街
	 *一台电视机正在播放新闻
	 *
	 *
	 *分析对象有什么特点:特征和行为
	 *对象:有特征和行为 具体特指的是某一个事物
	 *
	 *对象:有属性和方法 具体特指的是某一个事物
	 *
	 * 
	 *没有对象
	 *
	 *
	 *
	 *
	 *
	 *创建对象
	 *
	 * 
	 */

	 // 声明一个空对象
	var o = {}
	// 声明一个不空的对象
	var o = {
		name:"王大伟",
		age:18,
		sex:"male",
		married:false,
		// 方法:如果对象中哪一条属性的属性值是一个函数,那么我们就不太愿意把它叫成属性,而愿意叫做方法。
		sayHello:function(){
			alert("我叫王大伟~O(∩_∩)O")
			return 1;
		}
	}
	
	// !!对象的查询的两种写法:
	Object.属性名  	在Object对象中直接查找某个属性名的所对应的属性值
	Object["属性名"] 与上面等价
	Object[属性名]  把属性名看做成一个变量,首先从js执行环境上下文中获取该变量存放的值(如:"a"),然后再从Object对象中查找变量中存放的值所对应的属性的属性值(a属性的属性值)

	// 对象的修改/添加
	Object.属性名 = 新值
	Object["属性名"] = 新值

	// 删除掉对象中的某一条属性
	delete Object.属性名

	// 检测一个属性在另外一个对象中是否存在
	
	"属性名" in Object

	// 枚举对象

	for(var i in Object){
		// 循环体执行次数取决于Object属性的个数
		// 每一次进入循环体的时候i依次代表了对象的属性名

		// 对象的属性名
		// console.log(i)
		// 对象的属性值
		// console.log(Object[i])
	}
!基本类型和引用类型:除了Object以外所有的数据类型都是基本类型,Object自身是引用类型。在将引用类型的变量(a)赋值给另外的一个变量(b)时,b本身存储的只是一个对a的引用,也可以理解为是一个快捷方式,所以无论修改的是a还是b都会对另外的一个变量产生影响。而基本类型,在将一个变量赋值给另外的一个变量时,执行的是值的拷贝,此时有两个相同的值,所以无论修改了哪一个都不会对另外的一个变量产生影响。

入代码片

2创建对象三种方式

//第一种创建对象的方式:
      1 调用系统的构造函数创建对象
	  var 变量名 = new Object(); Object是系统的构造函数
	//小白举例子:
	//实例化对象:
		var obj = new Object();
		//对象有特征------属性和行为-----方法
		//添加属性------如何添加属性? 对象.名字 = 值
		obj.name = "小白";
		obj.age = 38;
		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.eat();
		console.log(obj.name);
		
	2、自定义构造函数创建对象
	//自定义构造函数创建对象  自己定义一个构造函数 自定义构造函数 创建对象

   自定义构造函数创建对象做了那些事?
	 1、在内存中开辟(申请一块空闲的空间)空间 存储创建的新的对象
	 2、把this设置为当前的对象
	 3、设置对象的属性和方法
	 4、把this对象返回
	 
	//函数和构造函数的区别 名字是不是大写(首字母是大写)
	function Person(name,age) {
		this.name = name;
		this.age = age;
		this.sayHi = function() {
			console.log("我叫:"+this.name+",年龄是:"+this.age);
		};
	}
	//自定义构造函数创建对象 先自定义一个构造函数 创建对象
	var obj = new Person("小明",10);
	console.log(obj.name);
	console.log(obj.age);
	obj.sayHi();

	var obj2 = new Person("小红",18);
	console.log(obj2.name);
	console.log(obj2.age);
	obj2.sayHi();

	console.log(obj instanceof Person);
	console.log(obj2 instanceof Person);

	//自定义构造函数创建对象
	function Dog(name,age,sex) {
		this.name = name;
		this.age = age;
		this.sex = sex;
	}
	var dog = new Dog("小黑",20,"男");
	console.log(dog instanceof Dog);
	console.log(dog instanceof Person);//false

3、字面量的方式创建对象
	var obj = {};
		obj.name = "小白";
		obj.age = 10;
		obj.sayHi = function() {
			console.log("我是:"+this.name);
		}
		obj.sayHi();

		var obj2 = {
			name:"小明",
			age:20,
			sayHi:function() {
				console.log("我是:"+this.name);
			},
			eat:function() {
				console.log("吃了");
			}
		}
		obj2.sayHi();
		obj2.eat();
	
	
入代码片

3工场模式创建对象

 //工厂模式创建对象
	   function createObject(name,age) {
	      var obj = new Object();
	      //添加属性
	      obj.name = name;
	      obj.age = age;
	      //添加方法
	      obj.sayHi = function() {
	      	 console.log("萨瓦斯卡 我叫:"+this.name+"我今年:"+this.age);
	      }
	      return obj;
	    }

	    //创建人的对象
	    var per1 = createObject("小白",18);
	    per1.sayHi();
	    //创建另外一个人的对象
	    var per2 = createObject("小红",22);
	    per2.sayHi();
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值