js深入讲解——面向对象——上

面向对象:对外统一提供调用接口的编程思想

属性:事物自身拥有的东西(如汽车拥有长、宽、高、颜色等)
方法:汽车,载人,来货
对象:众多人中的一个人
原型:所有函数都有一个prototype属性,该属性引用了一个对象,即原型对象。

原型对象的demo说明

function F(){
	alert(F.prototype)//返回的值是object
}
//F.prototype---->>内存地址---->>存储了一个对象

函数构造器创建函数对象

//var obj = new Function(var1,var2...functionBody());
//var1、var2是正常的变量;functionBody()是自定义的函数体
//注意var1、var2~变量的顺序是不能改变的;缺点:效率低不灵活

函数构造器创建函数对象demo

var obj = new Function("a","b","return a+b" );
var s = obj(2,5);
alert(s);

js中的闭包

闭包的用途:1.读取函数内部变量 (在js中函数内部可以读取全局变量,外部则不能读取内部变量)2.让i变量保留
优缺点:1.用利于封装可以访问局部的变量;缺点:内存占用浪费严重,内存泄漏

闭包demo

//1.实现外部对局部变量的调用
//原使用方法function b(){
            var i = 0;
            alert(++i);
            return i;
        }
        b();//弹出的结果是1
//闭包的方法
<script>
        function a(){
            var i=0;
            //注意b里面是可以直接调用i的
            function b(){
                alert(++i);
            }
            return b;
        }
        var c = a();
        c();//返回的结果是1,此处相当于直接调用的b
</script>

//2.让i变量保留
<script>
		function f1(){
			var n = 999;
			nAdd = function(){
				n = n+1;
			}
			function f2(){
				alert(n);
			}
			return f2;
		}
		var rs = f1();
		rs();//输出的结果是999;可能有的疑惑是为什么不返回的是1000;
</script>       

对象声明的方式
在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

对象声明方式的实例

	<script>
		//1.字面式直接声明(最基本)
		//注意此处数据类型和文字类型声明的区别
		//注意声明时,每个属性声明完之后用的 是逗号
		var person = {
			name:"zs",
			age:26,
			eat:function(fds){
				alert("我在吃" + fds)
			}
		}
		//调用属性和方法;先弹出zs,然后弹出 (我在吃面条)
		alert(person.name);
		person.eat("面条");
	</script>

<script>
		//2.new操作符跟oject构造函数
		//注意此处的O要大写,否则会报错
		var box = new Object();
		box.name = "zs";
		box.age = 100;
		box.infos = function(str){
			return this.name + "---" + this.age + "---" + str;
			//这里的this指的就是当前对象,即box
		}
		alert(box.name);//此处不能用this了;显示zs
		var con = box.infos("吃饭啦");显示 zs---100---吃饭啦
		alert(con);
</script>

<script>
		//3js构造方法声明对象(构造函数)
		function person(name,sex,age){
			this.name = name;//注意前面的name是属性,而后面的name是传的参数
			this.sex = sex;
			this.age = age;
			this.show = function(){
				alert(this.name + "---" + this.sex + "---" +this.age);
			}
		}
		var obj = new person("zs","男",23)
		console.log(obj.name);//弹出值是 zs
</script>

//4.工厂模式(就是在函数的内部创建对象)

<script>
		//5。原型模式声明对象
		//任何一个js方法或者函数,都自带一个prototype属性,且以对象的方式存在
		//原型模式声明的根本:函数本身声明为空内容,利用prototype定义一些属性和方法
		//所有实例化的对象,都拥有包含的属性和方法
		function test(){
		}
		test.prototype.color = "red";
		test.prototype.height = 1.7;
		test.showInfo = function(){
			alert(this.color + "---" +this.height )
		};
		var car = new test();
		alert(car.height);//弹出的是1.7
	</script>

<script>
		//5.2 原型模式+json数据定义属性和方法
		function test(){
		}
		test.prototype = {
			color:"red",
			heights:1.7,
			showInfo:function(){
				alert(this.color + "---" + this.heights);
			}
		}
		var car = new test();
		car.showInfo();
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值