prototype-name - prototype 后,name 属性无法获取
本文介绍了prototype-name - prototype 后,name 属性无法获取的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
<!DOCTYPE html>
<html>
<head lang="en">
<meta charset="UTF-8">
<title></title>
<style>
</style>
</head>
<body>
<script>
function Animal(){}
function Dog (age){
this.name = 'fuck you' ;
this.age = age
}
var dog = new Dog(12);
console.log(dog);
Dog.prototype = Animal;
var dog2 = new Dog(12);
console.log(dog2);
</script>
</body>
</html>
1.输出分别为Dog{age:12,name:'fuck you'} Dog{age:12},
为什么添加Dog.prototype = Animal 后结果不一样? 求原理解释?
解决方案
当为一个对象属性赋值是要遵循以下规则:
当对象的原型链中的原型对象上有对应的属性名,但是其是只读的,那么对象属性的赋值操作无效
当对象的原型链中的原型对象上有对应的属性名,但是其是可写的,且设置了set方法,那么对象属性的赋值操作无效,转而调用调用原型对象中的属性的set方法
当对象的原型链中的原型对象上有没有对应的属性名,那么直接在当前对象上添加这个属性(如果没有这个属性)并赋值
还有一个函数对象其有一个name属性,并且这个属性是只读的,
问题呈现出所所述的结果,原因就源于此~~
function Animal(){}
function Dog (age){
this.name = 'fuck you' ;
this.age = age
}
var dog = new Dog(12);
console.log(dog);
Dog.prototype = Animal;//将一个函数对象作为Dog的原型对象,其带有一个name只读属性
var dog2 = new Dog(12);
console.log(dog2);
这篇关于prototype-name - prototype 后,name 属性无法获取的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文