对象及原型

创建对象

字面量 创建对象

var obj ={
	key:value
}

new Object() 创建对象

var obj1 = new Object()

获取、设置对象属性

obj.key 获取/设置obj的key属性的值value

obj1.key / obj1.key=value

obj[‘key’] 获取/设置obj的key属性的值value

obj['key'] / obj['key']=value

key in obj 判断obj中是否有属性key

key in obj

delete obj.key 删除obj的key属性

delete obj.key

批量创建对象方法

工厂模式

//优点  生成独立的新对象
//缺点  代码重复  没有从属性
function fun(value1, value2){
	var obj ={
		'key1':value1,
		'key2':value2
	}
	return obj
}
var a = fun(实参1, 实参2)

原型模式 函数的原型对象 prototype属性

//优点  生成一个对象  没有重复  有从属
//缺点  可变的不可变
fun.prototype={
	key1:value1,
	key2:value2
}

构造函数

//首字母大写
//优点  创建不同对象  有从属关系
//缺点  代码重复
function App(value1, value2){
	this.key1=valve1,
	this.key2=value2
}
var app = new App(实参1, 实参2)

构造+原型 组合模式

//不重复  可改变  有从属
function App(value1, value2){  //可变
	this.key1=valve1,
	this.key2=value2
}
App.prototype={  //不可变
	key3:function(){},
	key4:value4
}
var app = new App(实参1, 实参2)

全局函数调用

function a(){  }
a() 或  window.a()

this指向

纯粹函数中的this        指向window
对象中的函数的this      指向上层对象
事件中的this            指向事件触发元素
构造函数中的this        指向实例化的对象

//改变this指向的方法
call(obj, 参数1, 参数2) //","隔开
apply(obj, [参数1, 参数2]) //"[]"包裹
bind(obj, 参数1, 参数2)() 或 bind(obj)(参数1, 参数2) //","隔开    参数写在前/后"()"中  需要调用

原型

每一个普通函数都有一个prototype属性,它指向函数的原型对象
原型对象有一个constructor属性,指向它的构造函数

原型链

每一个obj中都有`__proto__`属性,指向构造函数的原型对象,层层递进,最终指向null,这样形成的链式结构叫原型链

new操作符的实现

function fun(){
	this.key = value;
}
fun.prototype.btn = function(){}
var obj = {} //定义一个新对象
`obj.__proto__` = fun.prototype //函数的原型对象赋到obj的原型链上
fun.call(obj) //改变this指向到obj
var ol = obj //返回新对象

面向过程

需要关注每一步

面向对象编程(oop)

以对象的方式实现某个功能
优点:不需要关注如何实现,只关注如何使用
//案例1
<body>
		<div id="box"></div>
	</body>
	<script type="text/javascript">
		function Box(){
			this.div=document.createElement('div')
		}
        Box.prototype={
        	innerText:function(texts){
        		this.div.innerText=texts
        		return this
        	},
        	innerCss:function(obj){
        		for (var key in obj){
        			this.div.style[key]=obj[key]
        		}
        		return this
        	},
        	innerHtml:function(id){
        		var d = document.getElementById(id)
        		d.appendChild(this.div)
        		return this
        	}
        }
        var ass = new Box()
        ass.innerText('aaa').innerCss({'background':'red'}).innerHtml('box')
	</script>

面向对象

//特性:封装、继承、多态

原型链继承

//子类.prototype = new 父类
//优点:继承父类所有的方法和属性
//缺点:无法给父类构造函数传参
//父类
function Fu(value){
	this.keys = value
}
Fu.prototype.fun=function(a){console.log(a)}
//子类
function Zi(){}
Zi.prototype=new Fu('value')
//实例化Zi()
var zi = new Zi()
console.log(zi)

构造函数继承

//子类构造函数中 {父类.call(this)}
//优点:可以给父类构造函数传参
//缺点:不能继承父类的原型
//父类
function Fu(value1,value2){
	this.keys1 = value1,
	this.keys2 = value2
}
Fu.prototype.fun=function(a){console.log(a)}
//子类
function Zi(){Fu.call(this)}
//实例化Zi()
var zi = new Zi()
console.log(zi)

组合继承

//优点:即可给父类传参,也可继承父类的原型
//父类
function Fu(value1,value2){
	this.keys1 = value1,
	this.keys2 = value2
}
Fu.prototype.fun=function(a){console.log(a)}
//子类
function Zi(n,m){Fu.call(this,n,m)}
Zi.prototype=new Fu('value1','value2')
//实例化Zi()
var zi = new Zi('value3','value4')
console.log(zi)

多态

//父类
function Fu(value1,value2){
	this.keys1 = value1,
	this.keys2 = value2
}
Fu.prototype.fun=function(a){console.log(a)}
//子类
function Zi(n,m,c){
	Fu.call(this,n,m)
	this.c=c
}
Zi.prototype=new Fu('value1','value2')
Zi.prototype.dd='qwe'
//实例化Zi()
var zi = new Zi('value3','value4','sdf')
console.log(zi)

闭包

//即  闭包函数 闭包变量
//可以访问其他函数内部变量的函数
//即  定义在函数内部的函数
//---------------------------------------------------------
//方法一
function a(){
	var x=1
	//x 闭包变量 不会销毁,可能造成内存泄漏
	//b() 闭包函数
	function b(){
		console.log(x)
	}
	b()
}
a()
//-----------------------------------------------------
//方法二
function a(){
	var x=1
	//x 闭包变量 不会销毁,可能造成内存泄漏
	(function(){
		console.log(x)
	})()
}
a()
//-----------------------------------------------------
//方法三
function a(){
	var x=1
	//x 闭包变量 不会销毁,可能造成内存泄漏
	return function(){
		console.log(x)
	}
}
a()()
  • 6
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值