var proto= {
age:5
}
var create = function(name){
var child = Object.create(proto);
child.name = name;
return child;
}
var Lee = create('Lee');
console.log(Lee);//{name:"Lee"} ->这里输出的属性为什么没有age?
console.log(Lee.age);//5 ->但是这里却能输出
在《单页Web应用 JavaScript从前端到后台》书中输出的结果和我在浏览器控制台输出的结果完全不一样。
console.log(Lee);//{name:"Lee",age:5} -> 这是书中输出的结果
感觉这本书写得完全不对呀。。。
求解答!!!
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号
看这里关于 object.create
1.console.log(Lee);//{name:"Lee"} ->这里输出的属性为什么没有age?
因为age属性是Lee原型链上层的属性,不是Lee自身属性
2.console.log(Lee.age);//5 ->但是这里却能输出
访问age时,先在Lee里面找,没有,往原型链上找到 ,找到了,就输出原型链上的age
关于原型链,具体看看 javascript高级程序设计 这本书,or 找找其他博客文章~
请理解Object.create(),https://developer.mozilla.org...
age的属性是绑定在原型上的
因此console.log(Lee)中,age是在lee.prototype中的。
'-----------------------------------------------------------------------------
楼主新更改的代码中,更改之后都为1的。
console.log(Jessic.age)//输出1
能否贴出你的全部代码还有执行的环境。
参数
prototype
必需。 要用作原型的对象。 可以为 null。
descriptors
可选。 包含一个或多个属性描述符的 JavaScript 对象。
“数据属性”是可获取且可设置值的属性。 数据属性描述符包含 value 特性,以及 writable、enumerable 和 configurable 特性。 如果未指定最后三个特性,则它们默认为 false。 只要检索或设置该值,“访问器属性”就会调用用户提供的函数。 访问器属性描述符包含 set 特性和/或 get 特性。 有关详细信息,请参阅 Object.defineProperty 函数 (JavaScript)。
JavaScript中的函数运行在它们被定义的作用域里,而不是它们被执行的作用域里