面向对象,主要体现在这三个单词上;

Object、oriented、programming

JavaScript是以Object为导向的编程;

JavaScript也可以分分为值类型和对象类型;还有标类型的;undefined和null;为了看待数据的角度分的;

对象—Object–翻译到中文最好的是“东西”的意思;

JavaScript是以东西在导向的编程;Object不是孤立存在的,是复合的数据类型;

复合的数据为导向的编程;

基于对象的解释:

<script>
var obj={
name:"sss",
age:23,
heighet:158,
};
//基于对象的
// 单例模式,上面就是一个单例的形式;
//单利模式的好处如下:
var DOM={};
DOM.a=function(){};
DOM.b=function(){};
DOM.c=function(){};
//起到一个分类的作用,其他语言叫静态类,命名空间;这种DOM建立就是一个对象,避免生成全局变量,全局变量的风险比较高;
//这些都是基于对象的;
</script>

一个一个的定义,不适合数多的时候,如果需要用到这个obj需要重复的很多次;

我们这个时候就可以做个function,function这个函数,就像一个工厂;可以按照流程的生产数据;

可以大大提高我们的编程销量;

  • 基于对象:可以描述比较复杂的数据
  • 面向对象:不仅可以描述复杂的数据,也可以生产比较复杂的数据;

工厂模式的方法,生产出来的“东西”都是Object类型的;

<script>
function shirt(a){
this.height="";
this.width=150;
this.zize="";
}
var shirt1=new shirt(150);//用new关键字去执行一个函数,则这个函数就被当成一类来使用,这个函数叫构造函数;
//创建一个实例,这个实例属于shirt类型;
// 再以这个实例为上下文(content),运行shirt这个函数(这会shirt会变成一个函数;);
//构造函数的作用是初始化;
// 实例识别的作用;;
console.log(shirt)
</script>

原型模式:

原型链模式:是JS中实现继承的基本机制;

shirt1.a[0]=99;//先查找,私有属性没有a属性,则找到原型上的a属性,所以会导致改变shirt2.a的属性值;
shirt1.a=null;//直接写,不存在查找原型的这个过程,所以就直接写到了私有属性上了,这个不会改变shirt2.a
alert(shier2.a)

上面代码中,上边的代码,比下边的shirt1.a=null的写,多一步查找的过程;(如果它有了一个私有的属性a,则不在去原型上面查找了)

下边的代码°的时候有一个查找的过程,但是写的时候没有;

<script>
function shirt(){
this.height="";
this.width=150;
this.zize="";
}
var shirt1=new shirt();
//1、创建一个shirt类的实例;
// 2、把实例返回
// 3、以此实例为上下文运行shirt函数
shirt.prototype
//任何一个函数都有此属性,但他的只有函数当成类来用的时候才有意义;
/// 把所有共享的方法都保存在此属性上,这个属性明显是一个对象类型的,;
shirt.prototype.holdwarm=function(){console.log("保暖")}
var shier2=new shirt();
alert(shirt1.holdwarm==shier2.holdwarm);
//原型模式解决的是类上的方法共享问题的;
//类上的所有方法,都是保存在原型上;构造函数也是类上的函数,所以天生的就会保存在prototype;

shier2.fn1=function(){
console.log("fn1");
}
shirt1.fn1
shirt1.a[0]=99;//先查找,私有属性没有a属性,则找到原型上的a属性,所以会导致改变shirt2.a的属性值;
shirt1.a=null;//直接写,不存在查找原型的这个过程,所以就直接写到了私有属性上了,这个不会改变shirt2.a
alert(shier2.a)
</script>
</body>
</html>
  • 类上实例的属性,如果是读或者有读的过程,则是先查找私有的属性有没有,如果没有,则再去prototype去找;
  • 如果是写,则直接写在这个实例的私有地址上;

 

 

 

·············