javascript是一种基于对象的语言,但它没有类的概念,所以又和实际面向对象的语言有区别,面向对象是javascript中的难点之一。现在就我所理解的总结一下,便于以后复习:
万物皆是对象
字面量 – 字面上显示的东西叫做字面量
包装类 – 没有new的函数声明就是包装类
面向对象相关概念:
js是一种基于对象的语言,和其他面向对象语言不同。
对象:引用类型是一种数据结构,将数据结构和功能组织在一起,常被称为类
某个特定引用类型的实例
引用类型&对象
一、什么是对象?
1、对象即键值对的集合删除线格式 。
2、 只要是对象就可以有自己的私有属性。
3.、只要是new 出来的都是对象
4、不同对象肯定不会相等的。
5、对象都会有引用机制 。
- 如果不想引用就重新赋值
— 生命周期 —:
面向对象 - 最有用的就是私有属性。
面向对象 ES6之前的
类
原型 - 类的方法(prototype)。每个对象都有原型,原型也是一个对象,可以看做是构造函数的映像,是创建实例的模型。对象(类)的属性 prototype 即是对原型对象的引用,创建实例后,也有属性 proto 指向原型对象,但该属性是隐含的。
原型链 - 继承
- 自定义类的继承
a.prototype = new b();
call() 改变this指向的;并且调用了一次这个函数;从第二个参数开始就是调用函数的形参的到之后的。
apply()改变this的指向 第二个参数 是个对象数组 数组的第一个参数 到最后就是调用函数的从第二个参数之后的到最后对应.
二、创建对象
1、创建自定义对象最简单的方式就是创建Object的实例,并在为其添加属性和方法,如下所示:
var dog = new Object();
dog.name = "dudu";
dog.color = "white";
dog.say = function(){
alert(this.name);
}
2、工厂模式创建对象
利用工厂模式的思想,用一个函数来封装创建对象的细节,并提供特定接口来实现创建对象:
var Str = "123456";
var Str2 = new String("123123")
String.prototype.run = function(){
alert("I can run");
}
Str.run();
3、构造函数模式
在ECMAScript中定义了很多原生的构造函数,比如说Array、Date,我们可以用这些原生构造函数创建特定类型的对象。javascript也允许我们创建自定义的构造函数,定义对象类型的属性和方法,从而用于创建某一类的对象。
function Leo(name,age){
this.name = name;
this.age = age;
this.fly = function(){
console.log(this.name+ "今年" + this.age + "岁了",this);
}
}
var fle = new Leo("雪兮",22);
fle.fly();
三、面向对象的this的指向(面试会经常问到哦)。
1、在普通函数下 this指向的是 window
2、有事件源指向事件源本身
3、在定时器下 除es6 this 指向window。
4、对象下 this 指向的是自己本身。
不是所有的东西都是绝对的
window 是绝对的 永恒的
只需要 控制 类 的prototype 就可以控制类的所有方法
toString(); 属于Object的方法
继承 - - - - -
儿子 拿父亲的
父亲 不能拿 儿子的
原型链示例:
示例1:
改变this指向:
function Leo1(name,age){
this.name = name;
this.age = age;
}
function Leo2(name,age){
// Leo1.call(this,name,age);
Leo1.apply(this,[name,age]);
}
var Leo = new Leo2("小明",22);
console.log(Leo);
注:call()和apply()都是改变this指向。
他们的区别:call()传参时是以普通形式传参(除了第一个参数)。
appay()传参时是以数组的形式传参(除了第一个参数)。
示例2:
function a(){
console.log(this);
}
a.call(1);
function a(){
this.k = 10;
}
function b(){
a.call(this);
}
console.log(new b().k);
jquery 原生封装方法:
function jquery(){
};
jquery.prototype.addClass = function(){
}
function $(obj){
return new jquery(obj);
}
$("a")