如果你希望在第二种和第三种情况下也屏蔽 foo , 那就不能使用 = 操作符来赋值 , 而是使用
var anotherObj = {
a: 2
b: 2
var myObj = Object.create( anotherObj )
myObj.c =12
console.log( myObj) // { c: 12 ___proto___: { a: 2 b: 2
myObj.a = 100
console.log(myObj) // { c: 12 a: 100 ___proto___: { a: 100 b: 2
var anotherObj = {
a: 2
b: 2
Object.defineProperty(anotherObj 'foo' {
value: 1000
writable: false
)
var myObj = Object.create( anotherObj )
myObj.foo = 100
console.log(myObj) // { ___proto___: { a: 2 b: 2 foo: 1000
Object.defineProperty(myObj 'foo' {
value: 1001
writable: true
)
console.log(myObj) // { foo: 1001 ___proto___: { a: 2 b: 2 foo: 1001
「类」现在你可能很好奇:为什么一个对象需要关联到另一个对象呢?这样做有什么好处?这个问题非常好 , 但是在回答之前我们首先要理解 [[Prototype
我在这里针对第一种情况 , 和第二种情况做了个案例 , 情况确实如书中所讲的那样 。
如果 defineProperty 定义了原型中的属性 , 并且可写与修改设置 为 false , 那么直接用 = 赋值不起作用 , 使用 defineProperty 才会起作用 。 但是事实上有谁会在代码里使用 defineProperty 来定义属性呢?究竟是在什么情况下 , 我才会去想想配置 writable configuable enmunable 这些参数呢?
很少会用上 。
不是什么?
以前我们说过 , JavaScript 和面向类的语法不同 , 它并没有作为对象的抽象模式或者说蓝图 。 JavaScript 中只有对象 。
为什么一个对象需要关联到另一个对象?这个问题我也想知道 , 因为就我目前的项目经验 , 用到原型的次数寥寥无几 , 好几次还是我强行加进去的 。
在没有类以前 , 人们会把方法绑定在原型对象上 , 来达到节省内存的地步 。
作者在这里自问自答 , 自肯定的写作手法 , 多少让人忍俊不禁 , 这个问题非常好?你自己提的吧!
「类」函数多年以来 , JavaScript 中有一种奇怪的行为一直在被无耻的滥用 , 那就是模仿类 。 我们会仔细分析这种方法 。
这句话很重要 , JavaScript 中只有对象 。 连数组都是个伪数组 , 是由对象假装而成的 。 函数也是一个对象 。
基本类型连 null 都是一个对象 。
JavaScript 的基本类型 string nmber boolean undefined 不是对象 。
JavaScript 这门语言设计出来 , 本身就是作为脚本语言 , 是为了在一页中使用的 , 如今会去讨论设计蓝图的问题 , 也是因为它现在扮演着更为重要的角色 , 代码量也是极剧增加 。
这种奇怪的「类似类」的行为利用了函数的一种特殊属性:所有函数默认都会拥有一个名为 prototype 的公有并且不可枚举的属性 , 它会指向另一个对象:
function Foo() {
Foo.prototype // {这个对象通常被称为 Foo 的原型 , 因为我们通过名为 Foo.prototype 的属性引用来访问它 。 然而不幸的是 , 这个术语对我们造成极大的误导 , 稍后我们就会看到 。 如果是我的话就会叫它「之前被称为 Foo 的原型的那个对象 。 」
- javascript|穿戴设备将迎变革,OPPO又增新专利,能提升模式切换效率!
- |强劲送风,满足你对美感的挑剔—洛斐有范S桌面风扇
- 你甩不掉的伴侣——AEROPEXAS800初体验
- 趋势雷达|行业流行力——《新锐美妆种草看点》
- 社交平台cookie出卖了你——木马FFdroider欲窃取你的账户信息丨大东话安全
- 电子商务|广州蓝景分享 — 给刚入职前端\大佬\们的一些建议
- 开源软件|嵌入式开发:技巧和窍门——引导加载程序跳转到应用程序代码
- 三星|三星 S22 Ultra——硬件上的机皇,系统体验两极分化
- 天津航空——打造主题飞机 为智能大会插上“双翼”
- 支付宝|嵌入式开发:嵌入式基础——重启和重置的区别
