JavaScript对象和原型的相关方法

实例

<script>
    //in 关键字用来寻找属性或方法是否在对象中写法:属性 in obj
   /* var person = {
        name: "张三",
        age: 23,
        gender: "male",
        eat: function(){
            console.log(this.name+"is eating");
        }
    }
    //使用in来遍历对象中的所有属性
    for(var key in person){
        console.log(key + "="+person[key]);
    }
    var animal = {
        species: "human",
        hapti: "land",
        sleeping: function(){
            console.log("sleeping");
        }
    }
    person.__proto__ = animal;
    console.log(person.species);
    for(var key in person){
        //这里会将该对象的原型上的属性和方法也打印出来
        console.log(key + "="+person[key]);
    }
    //-------obj.hasOwnProperty(key):判断key否是直接是obj的属性或方法,而不是原型上的
    //alert(person.hasOwnProperty("species"));
    //以下方法会遍历出对象中的所有自己的属性和方法
    for(var key in person){
        if(person.hasOwnProperty(key)){
            console.log(key + "="+person[key]);
        }
    }
    //以下方法会遍历出对象中的原型的属性和方法
    for(var key in person){
        if(!person.hasOwnProperty(key)){
            console.log(key + "="+person[key]);
        }
    }
    //in本质上也是一个运算符,左侧是属性名,右侧是对象,运算结果为如果该属性在对象(或原型)中则返回true,否则返回false
    document.write("species" in person);*/

    //----------constructor:是对象原型上的一个属性,该属性指向的是构造该对象的构造函数
    function Person(name, age){
        this.name = name;
        this.age = age;
        this.eat = function(){
            console.log(this.name+" is eating");
        }
    }
    var p1 = new Person("john", 23);
    console.log(p1);
    //使用constructor:是对象原型上的一个属性,该属性指向的是构造该对象的构造函数
    /*function Animal(){
        this.name = name;
        this.age = age;
        this.sleep = function(){
            console.log(this.name+" is sleeping");
        }
    }
    //将p1的constructor目标指向Animal
    p1.__proto__.constructor = Animal;
    console.log(p1);
    p1.sleep();//这里会报错*/
     /*var p2 = new Person("张三",44);
     p1.__proto__.constructor.prototype.sleep = function(){
         console.log(this.name + " is sleeping");
     }//Person.prototype.sleep是一模一样的
     p1.sleep();
     p2.sleep();*/

    //------------------Object.create方法
    //Object.create(对象,null),实现继承
    //对象1 = Object.create(对象2) 表示对象1中的原型就是对象2
    var p2 = Object.create(p1);
    console.log(p2);
    var obj = Object.create(null);//这里将定义一个真正的空对象,连原型也没有
    var obj2 = {}
    console.log(obj,obj2)
    document.write("obj2"+obj2);
    document.write("obj"+obj);//这里会报错,因为obj里没有原型,也就不能继承object中的tostring方法
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值