JavaScript 继承(六)原型二

17 篇文章 0 订阅

不好意思因为懒,,我懒得弄图,,就是代码+注释


//首先 我们明白变量屏蔽 简单来说就是局部变量屏蔽全局变量
//这事就不废话了。。
//那么 如果 一个对象本身有 a 属性 他的prototype上也有会怎么样呢?
//用代码说话
function Foo(){
    this.a = 0;
    Foo.prototype.a = 1;
}

var foo = new Foo();

console.log(foo.a); //0
//由此可见 本身的属性会屏蔽 prototype上的属性

var Bar = {
    get a(){
        return "a";
    },
    set a(val){
        console.log("给a赋值了")
        this._a_ = val;
    },
    "b":"b",
    "c":"c"
}


var bar = Object.create(Bar);
console.log(bar.a,bar.b,bar.c)
//可以打印 a b c

console.log("a:"+bar.hasOwnProperty("a"))
console.log("b:"+bar.hasOwnProperty("b"))
console.log("c:"+bar.hasOwnProperty("c"))
//均为假 说明都在bar.prototype上

Object.defineProperty(bar,"c",{
    
    writable:false
})
//修改 c 不可写


//给bar的 a b c赋值 问 会有什么情况发生?
//在bar 上 创建对应变量 然后屏蔽他 prototype上的同名变量?
//还是直接修改他 prototype上的那个变量?
bar.a = 1;
//给a赋值了
bar.b = 2;
bar.c = 3;
console.log(bar.a,bar.b,bar.c);
// a  2  undefiend
//由此可见 三种不同的情况 结果不尽相同
//看看他们到底在bar上还是在prototype上
console.log("a:"+bar.hasOwnProperty("a"))//false
console.log("b:"+bar.hasOwnProperty("b"))//true
console.log("c:"+bar.hasOwnProperty("c"))//true
//也就是说 如果设置了 set 那就是直接调用prototype上的对应 set
//如果可写 就会创建一个同名变量 屏蔽
//如果只读 创建成功 但是无法赋值










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值