js 实例 及 原型

<!DOCTYPE html>
<html lang="en">

<body>


</body>
<script>
    function print(txt) {
        document.body.innerHTML += txt + '</br>';

    }
</script>
<script>

    var obj = {
        constructor: function () {
            this.name = "haha"
        },
        name: 'xm',
        getName: function () {
            return this.name;
        }

    };
    print(Object.hasOwnProperty('getName'))//false
    print(obj.hasOwnProperty("name"));//true
    print(obj.hasOwnProperty('getName'))//true

    print(obj.getName())//xm

    print(+"10." + 1)//11

    print(obj.toString())//[object Object]
    print(obj.valueOf())//[object Object]
    print(obj.toLocaleString())//[object Object]

    var list = ['x'];
    list.unshift('a', 'b');
    print(list)//a,b,x

    Object.defineProperty(obj, '_name', {
        writable: true,
        value: 'default .',
        configurable: true
    });
    Object.defineProperty(obj, 'name', {
        get: function () {
            return this._name;
        },
        set: function (name) {
            this._name = name;
        },
//        what:function () {
//            return 'what....'
//        }
    });

    Object.defineProperties(obj, {
            age: {
                writable: true,
                value: '12'
            },
            sex: {
                //value:'man',
                set: function (sex) {
                    this._sex = sex;
                },
                get: function () {
                    return this._sex;
                }
            }
        }
    );

    'use strict';
    //    delete  obj._name

    //    obj.name='....'
    print(obj.name)//default .

    print(Object.getOwnPropertyDescriptor(obj, '_name').value);//default .
    print(Object.getOwnPropertyDescriptor(obj, '_name').configurable);//true
    print(Object.getOwnPropertyDescriptor(obj, 'name').what);//undefined
    print(obj.age)//12
    print(obj.sex)//undefined


    print('------------------')

    function Person(name, age) {
        this.name = name;
        this.age = age;
        //每个实例都有自己的方法
        this.getName = function () {
            return this.name;
        }
    }

    //    Person("小明",10);
    //    print(name);
    //    print(age)
    //    print(getName());

    var p = new Person('xiaoming', 11);
    print(p.getName());//xiaoming

    print(p.constructor === Person && new Person().constructor === Person);//true

    print(p.getName === new Person().getName);//false

    print('------------------');

    function Student(name, age) {
        this.name = name;
        this.age = age;
    }
    //所有实例公用getName方法
    Student.prototype.getName = function () {
        return this.name;
    };
    Student.prototype.sex = 'woman';
    var xiaoming = new Student('xiaoming', 15);
    print(xiaoming.getName());//xiaoming
    print(xiaoming.constructor === Student);//true
    print(xiaoming.getName == new Student('', 0).getName);//true

    var xm = new Student('xm', 11);
    var xh = new Student('xh', 12);
    print(xm.sex);//woman
    print(xh.sex);//woman
    xm.sex = 'man'; //该实例中,实例中的同名熟悉会覆盖原型中的熟悉,但不会影响另一个实例中的sex值
    // 调用实例的方法或属性时,先在该实例内部查找,找不到就去原型中查找。
    print(xm.sex);//man
    print(xh.sex)//woman

    print(xm.hasOwnProperty('sex'))//true  用于实例属性 sex
    print('sex in xm ?' + ('sex' in xm));//true   in用于判断对象实例能否调用某个属性,不管是在原型中还是在实例中,只要有就返回true
    xm.what = '...';
    print('what in xm ? ' + ('what' in xm))//true
    print('what in xh ? ' + ('what' in xh))//false
    print(xh.hasOwnProperty('sex'))//false   不拥有实例属性,sex是原型中的
    print('sex in xh ?' + ('sex' in xh));//true
    delete  xm.sex;
    print(xm.sex);//woman  删除了实例中的sex属性,所以再次访问时得到的是原型中定义的woman
    print(xm.hasOwnProperty('sex'))//false  删除后实例中没有了sex属性,但原型中还有

    print('sex in xm ?' + ('sex' in xm));//true


    print('-------for in  obj--------')
    for(var w in xm){//除了原型中不可枚举属性外,都可以得到
        print(w)
//        name
//        age
//        what
//        getName
//        sex
    }

    print(Object.keys(Student.prototype))//getName,sex  只获取原型中可枚举的属性
    print(Object.keys(xm))//name,age,what 获取实例中可枚举的属性,不包含原型中的属性

    Student.prototype={ //或者这样一次定义多个原型属性
        xxx:'xxx',
        yyy:'yyy',
        getXXX:function () {
            return this.xxx;
        },
        getYYY:function () {
            return '...'
        },
        getSchool:function () {
            return '...'
        }

    }
</script>

</html>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值