JS面向对象——类和原型

版权声明:进击的葱 https://blog.csdn.net/qlwangcong518/article/details/86316392

描述:

JS面向对象——类和原型

实现:

 /*
        *
        *  prototype  原型  基因
        *  原型是有类当中创建,是由父代传入的
        *  针对对象来说,这个原型就是自身根本原始属性
        * 对象的__proto__  他与类的prototype相同
        * prototype就是类中对于自身基因的描绘
        * __proto__对象实例化类获取初始属性和方法集,
        * 因为__proto__是基于不同类别继承,就会形成链条形态,因此我们也称为原型链
        *
        * */
        
        function 人类() {
//            this是实例化的对象,因此这里就是在实例化的对象上添加了对象属性
            this.头发="光头"
        }
        
        人类.prototype={
            鼻子:1,
            眼睛:2,
            嘴巴:1,
            耳朵:2,
            说话:function () {
                
            },
            直立行走:function () {
                this.腿=2;
                this.脚=2;
            },
            思考:function () {
                
            }
        };
        人类.prototype.constructor=人类;
        /*
        *  原型属性来自于类的初始化后的数据
        *
        *
        * */
        var 张晓明=new 人类();
        张晓明.姓名="张晓明";
        张晓明.工作="程序员";
        张晓明.性别="男";
        张晓明.直立行走();
        张晓明.眼睛=1;
        var 王倩=new 人类();
        王倩.姓名="王倩";
        王倩.工作="女程序员";
        王倩.性别="女";
        console.log(张晓明,王倩);
        /*
        *   原型属性是初始值,而且可以被继承,原型属性的初始值是不可以被修改的
        *   对象属性是不同对象可以拥有不同的对象属性
        *   但是如果是同一个类构造对象,他们必定原型属性完全相同
        *
        * */
//        他们两个对象都是同一个类构造出来的,因此对象的原型相同
        console.log(张晓明.__proto__===王倩.__proto__);
        console.log(张晓明.嘴巴);
//        对象中如果没有对象属性,就查找是否有这个对象原型属性,如果有就返回对象的原型属性值
       张晓明.嘴巴=2;
       //对象的属性被修改时,不能修改原型属性,因此就会添加同样的属性名的对象属性
//        下次调用该属性时,调用的是对象属性,而不再调用原型属性,除非使用delete删除该对象属性
        delete 张晓明.眼睛;
        console.log(张晓明.眼睛);

//      不允许修改对象的原型属性
//        张晓明.__proto__.嘴巴=8;
        console.log(new 张晓明.constructor());


//       对象的属性是否是这个类的原型属性判断,返回true或false
       console.log( 人类.prototype.isPrototypeOf(张晓明));
        console.log( 王倩.__proto__.isPrototypeOf(张晓明));


        console.log("----------------------------------------");
//        判断对象中是否有这个对象属性,原型属性返回为false
//        console.log(王倩.hasOwnProperty("姓名"))
//        判断对象中是否有这个对象属性,包括原型属性和对象属性
//        console.log("耳朵" in 王倩)

//        判断当前属性是否是对象的可枚举属性,原型是不可枚举的,
        // 因此原型属性也不属性对象的可枚举属性
        console.log(王倩.propertyIsEnumerable("耳朵"));

猜你喜欢

转载自blog.csdn.net/qlwangcong518/article/details/86316392