JavaScript—构造函数、原型对象和原型链

    科技2022-07-12  119

    文章目录

    1.构造函数2.原型对象3.原型链:4. 扩展方面5.instanceof的判断6.练习

    1.构造函数

    构造函数和普通函数的区别: 1.构造函数的函数名习惯上首字母大写。 2.构造函数需要new关键字来调用。

    构造函数为:

    function Person(name,age,gender){ this.name=name; this.age =age; this.gender=gender; this.text=function (){ document.write("这是一个函数"); } }

    构造函数创建对象:

    var per=new Person("孙悟空",18,"男"); var per2=new Person("猪八戒",17,"男");

    注:使用同一构造函数创建的对象称为一类对象,也将该构造函数成为一个类,所创建的对象称为该类的实例。 注:可用instanceof检查某个对象是否是一个类的实例 per instanceof Person

    2.原型对象

    第一:prototype属性 (1).函数的内部都有一个属性:prototype, 该属性默认指向一个原型对象; (2).该原型对象中有一个constructor属性,该属性指向本函数对象; (则函数与它的原型对象可以相互转换、指向。fun.prototype.constructor=fun) 原型对象:就是一个空Object对象

    第二:显示原型与隐式原型 (1).每个函数都有一个prototype属性,即显式原型 (2).该函数的实例对象都有一个__proto__属性,即隐式原型

    *实例对象的__proto__属性指向原型对象 *即函数的显式原型和函数实例的隐式原型指向相同,都指向原型对象 *通过函数的显式原型prototype可以给原型对象添加属性或方法。 *该函数的所有实例对象都可以用原型中的属性与方法。 给原型对象添加属性或方法: Fun.prototype.a=1000 Fun.prototype.test=function(){ console.log('123'); }

    原型对象的作用: 原型对象相当于一个公共区域,函数所有的实例都可访问,则可将共有的属性或方法都统一添加到原型对象中,这样可以不用分别添加,也不会影响到全局的作用域。

    3.原型链:

    别名:隐式原型链 (沿着__proto__的这条链) 作用:查找函数实例对象的属性(方法)

    访问一个函数实例对象的属性或方法时,会按照原型链来查找:

    1.先在对象自身中找,找到就可返回 2.如果没有,再沿着__proto__这条链向上查找,一直找到原型的尽头,找到返回 (先在原型对象中找,找不到就在原型的原型中找) 3.如果最终没有找到,返回undefined;

    原型链的结构: *Object的原型对象是原型链的尽头,toString等方法都是放在了Object的原型对象中。 *实例对象的原型的原型是Object的显式原型

    4. 扩展方面

    所有对象都是Function的实例 var obj = new Object() 所有函数都是Function的实例(包括自身) var fun = new Function() Object是Function的实例

    5.instanceof的判断

    instanceof:用来判断一个对象是否为一个函数的实例对象; 若A instanceof B ,则判断A是否为B的实例对象,若是则返回true,若不是返回false;

    instanceof是如何判断的?? *表达式: A instanceof B *如果B函数的显式原型在A对象的原型链上,返回true,否则返回false (B的显式原型在A的原型链上就可以,不管是哪级隐式原型链)

    6.练习

    <script type="text/javascript"> function F (){} Object.prototype.a=function(){ //a添加到Object的原型 console.log("a()"); } Function.prototype.b=function(){ //b添加到Function的原型 console.log("b()"); } var f =new F(); f.a(); //返回a(),他会先在f中找,找不到就去原型中找, //再找不到,就去f的原型的原型中找, //f的原型的原型,就是Object.prototype; //f.b(); //返回undefined,在原型链尽头也没有; F.a(); //返回a() //函数的原型对象就是一个object空对象, //则函数原型的原型就是Object.prototype; F.b(); //返回b() // var F=new Function(); // F则为Function的实例,可访问原型对象中的内容 </script>
    Processed: 0.014, SQL: 8