<script> //普通对象与函数对象,js万物皆是对象 //自带的 function a1() { function f1() {} var f2=function () {} var f3=new Function(‘str‘,‘console.log(str)‘); var o3=new f1(); var ol={}; var o2=new Object(); console.log(typeof Object);//function console.log(typeof Function);//function console.log(ol);//object{} console.log(typeof o2);//object console.log(typeof o3);//object console.log(typeof f1);//function console.log(typeof f2);//function console.log(typeof f3);//function } //原型对象 function b1() { } function b2 () { console.log(b1.prototype);//b1 {} console.log( typeof b1.prototype);//object console.log(typeof Function.prototype);//function(特殊情况) console.log(typeof Object.prototype);//object console.log(typeof Function.prototype.prototype);//undefined } //原型作用:继承 var p1=function (name) { this.names=name; }; p1.prototype.getM1=function () { return this.names }; var name1=new p1(); name1.getM1(); //例子:原型链 console.log(name1.__proto__===p1.prototype);//true console.log(p1.prototype.__proto__===Object.prototype);//true console.log(name1.__proto__===Object.prototype);//false console.log(Object.prototype.__proto__);//null 最大的objct指向的是就是null,这样就表示是原型链 //疑点说明 console.log(Object.__proto__===Function.prototype);//true //Object它是函数对象,而且是指向Function的 console.log(Function.__proto__===Function.prototype);//true //Function与Object一样,但不同是指向Function.prototype; //上面的方式其实是按照现实中的方式来的 //从无到有的情况 //Function.__proto__===Object.prototype其实就是指向自己,没有任何意义 //js一切均是对象,函数也是对象 //constructor预定义属性,用于引用原型函数对象,是循环引用 //父类.prototype.constructor是全等于父类 //Object.constructor==Function,object本身 就是function函数构造的 //constructor是在该对象原型链上寻找的第一个constructor属性所指向的对象:自己总结下:也就是实例化对象指向父类的对象 function d1() { } var d2=new d1(); console.log(d2.constructor==d1);//true console.log(d1.constructor==d2);//false //原型链生成是靠__proto__ 不是prototype var animal=function () {}; var dog=function () {}; animal.price=2000; dog.prototype=animal; var tidy=new dog; console.log(dog.price); console.log(tidy.price); //通过new方式生成的,会产生链,在操作时,new出来的实例化对象 //obj自动生成一个.__proto__属性,这样,如果没有生成.__proto__属性,使用别的属性时,会undefied未定义, //但如果使用了obj.attr时,因为obj是一个实例对象,所以在使用attr这个属性时,是不会报错的,会正常输出对应的数据 //只有子类或者实例化对象有__proto__(包括自己,不包括最上面的父类)方法 //prototype会给父类和自自己这个类,如果子类被孙子类继承,那么子类也将有prototype和__proto__属性
时间: 2024-11-10 01:28:24