JS原型和继承

Javascript面向对象?
面向对象有三个基本特征,即封装、继承和多态。一般情况下,三个特性都完全都满足的话,我们称是面向对象语言,而称满足部分特性的语言为:基于对象语言。
对象系统的继承特性,有三种实现方案,包括基于类,基于原型和基于元类;Javascript没有类继承体系,而是采用原型继承来实现对象系统,因此javascript没有“类”,而采用一种名为“构造器”的机制来实现类的某些功用。

Js 构造函数:
constructor引用了初始化这个对象的构造函数
instanceof 运算符检测constructor属性的值
typeof 返回数据的类型
对象的创建:

    var obj1 = {};
    var obj2 = new Object();
    console.log(obj1 instanceof Object); //true
    console.log(obj2 instanceof Object); //true

每一个构造器方法都有一个prototype属性,每一个新实例也都有一个_proto_,不建议使用_proto_,IE不支持

原型对象


原型对象实际上是构造函数的一个实例对象,类的所有实例对象都从同一个原型对象上继承属性,因此,原型对象是类的核心。
原型对象是类的唯一标识:当且仅当两个对象继承自同一个原型对象时,他们才是属于同一个类的实例。而初始化对象的状态的构造函数则不能作为类的标识,两个构造函数的prototype属性可能指向同一个原型对象,那么这两个构造函数创建的实例属于同一个类的。

对象字面量对象创建的原型是Objiect.prototype:

let obj={}<=>let obj = new Objiect();

JS构造器


JS 在Objiect超类中定义了一个constructor属性,即构造器属性,并定义该属性始终指向对象的构造函数。由于所有对象都继承于Objiect对像,所以每一个对象都有一个constructor属性,但是它们值不同,分别引用自己的构造函数。
JS中Function对象是构造万物的始祖,同时Function对象的构造器是其本身

console.log(Object.constructor === Function);
console.log(Function.constructor===Function)
结果:
=》true
=》true

    function Person() {


    }

    var ps= new Person();
    ps.name='zsh';
    console.log(ps.hasOwnProperty('name'));
    console.log(Person.prototype.isPrototypeOf(ps));

Function 和 function

var a =new Date();
    for(var i=0;i<10000;i++){
        function fun() {

        }
    }
    var b = new Date();
    console.log(b-a);
    var c =new Date();
    for(var i=0;i<10000;i++){
       new Function();
    }
    var d = new Date();
    console.log(d-c);

这里写图片描述
可以看出:javascript 通过function和函数直接量定义函数,Javascript只会对函数进行一次解析和编译,而Function()构造函数定义的函数,在每一调用函数时,都会进行解析和编译。所以,function比Function执行效率高

猜你喜欢

转载自blog.csdn.net/zshsats/article/details/79922440