35.js--原型链

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


1.构造函数

  根据函数的业务分类取了不一样: 构造函数  闭包  回调  事件监听器等等  

  一般专门用于创建对象的函数  就是构造函数

案例1:

function fn(){

                this.a=100

            }          

            var f1=new fn() 

fn这构造函数的功能是什么? 创建一个有属性a的对象

案例2:

            function fn2(){

                this.tool=function(){}

            }          

            var f2=new fn2()

            var f3=new fn2()

            var f4=new fn2()

fn2这构造函数的功能是什么? 创建一个有tool方法的对象

同一个函数创建出来的对象们 具有相同的空间结构和功能

每一个函数创建出来的对象是不相同的,有哪些构造函数呢?

        a:   1.自定函数  2.官方提供的函数:Function Object  String  Number Bloolean  Array Date Math

例如:var obj1=new Object()

它的语法糖:代码有多种写法时  简便的写法就是语法糖  

语法糖: 对象直接量

例如:  var obj2={}

            console.log(obj1)

2.__proto__和prototype的案例

案例1:

        	function fn(){				
			 
            } 

			var f1=new fn()
			var arr1=[1,3,4,5]//new Array()
			console.log(arr1.__proto__===Array.prototype)

运行结果:

案例2:

function fn(){

}
			                // fn.prototype=new Object()==>{}
Object.prototype			


var f1=new fn()            //Object
var arr1=[1,3,4,5]
arr1.push()
			              // arr1.__proto__==>Array.prototype==>new Object()
			                console.log(f1.__proto__.__proto__===arr1.__proto__.__proto__,f1.__proto__.__proto__)

运行结果:

案例3:

            var arr1=[1,2,3,4]
			function fn(){
				this.a=100
			}
			fn.prototype=arr1

			var f1=new fn()
			console.log(f1.a,f1.length,f1.push)

注释:
var arr1=[1,2,3,4]//new Array(1,2,3,4)
fn.prototype=arr1//以后fn函数去创建对象的话  对象的原型对象是arr1数组

运行结果:

3.自定义构造函数案例

自定义构造函数的原型对象也是一个自定义构造函数创建的对象

案例1:

         function  Kedou() {
		  	  this.life=1
			  this.tail=1		  
		  }
		  
		  var k1=new Kedou()
		  
		  function  Qingwa () {
		  	   this.tui=4
			   this.yanjing=2
		  }

		  Qingwa.prototype=new Kedou()		  
		  var q1=new Qingwa()
		  console.log(q1.life)

运行结果:

 案例2:

           function Element(){
				 this.width="20px"
				 this.color="red"
				 this.fontSize="20px"
			}
			function  Div() {
				this.value=123
				this.innerHTML="hello"
			}
			var el=new Element()
			el.height="40px"
			
			Div.prototype=el         //执行以后 用Div创建的对象有Element创建的对象的功能
			var div1=new Div()
			div1.className="box"
			console.log(div1.value,div1.innerHTML,div1,div1.width)
			
			var div2=new Div()
			console.log(div2.value,div2.innerHTML,div2,div2.width)
			
			
			console.log(div2.className,div2.height,div1.height,div1.className)
			

运行结果:

4.构造函数、原型和实例的关系

(1)构造函数、原型和实例的关系

        ①构造函数都有一个属性prototype,这个属性是一个对象(Object的实例)

        ②原型对象prototype里面有一个constructor属性,该属性指向原型对象所属的构造函数

        ③实例对象都有一个_proto_属性,该属性也指向构造函数的原型对象,它是一个非标准属性,不可以用于编程,它是用于浏览器自己使用的

  (2)prototype与_proto_的关系

        ①prototype是构造函数的属性

        ②_proto_是实例对象的属性

                    ——这两者都指向同一个对象

    【总结】

            i)函数也是对象,对象不一定是函数;

            ii)对象的本质:无序的键值对集合;键值对当中的值可以是任意数据类型的值

            iii)对象就是一个容器,这个容器当中放的是(属性和方法)

   (3)属性搜索

      ①在访问对象的某个成员的时候会先在对象中找是否存在

      ②如果当前对象中没有就在构造函数的原型对象中找

      ③如果原型对象中没有找到就到原型对象的原型上找

      ④知道Object的原型对象的原型是null为止

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值