// 修改一个Number类型的值的原型
const num = 1;
num.__proto__.name = "My name is 1";
console.log(num.name); // My name is 1
// 修改一个对象的原型
const obj = {};
obj.__proto__.name = "dreamapple";
console.log(obj.name); // dreamapple
// 函数字面量
console.log((function(){}).prototype); // {constructor: ƒ}
// Date构造器
console.log(Date.prototype); // {constructor: ƒ, toString: ƒ, toDateString: ƒ, toTimeString: ƒ, toISOString: ƒ, …}
// Math.abs 不是构造器,不能通过new操作符生成一个新的对象,所以不含有prototype属性
console.log(Math.abs.prototype); // undefined
// 其中F表示一个自定义的函数或者是含有prototype属性的内置函数
new F().__proto__ === F.prototype // true
// 通过函数字面量定义的函数的__proto__属性都指向Function.prototype
(function(){}).__proto__ === Function.prototype // true
// 通过对象字面量定义的对象的__proto__属性都是指向Object.prototype
({}).__proto__ === Object.prototype // true
// Object函数的原型的__proto__属性指向null
Object.prototype.__proto__ === null // true
// 因为Function本身也是一个函数,所以Function函数的__proto__属性指向它自身的prototype
Function.__proto__ === Function.prototype // true
// 因为Function的prototype是一个对象,所以Function.prototype的__proto__属性指向Object.prototype
Function.prototype.__proto__ === Object.prototype // true
constructor表示一个对象的构造函数,除null和undefined,JS中的所有数据类型都有这个属性; 我们可通过下面的代码来验证一下:
null.constructor // Uncaught TypeError: Cannot read property 'constructor' of null ...
undefined.constructor // Uncaught TypeError: Cannot read property 'constructor' of undefined ...
(true).constructor // ƒ Boolean() { [native code] }
(1).constructor // ƒ Number() { [native code] }
"hello".constructor // ƒ String() { [native code] }
一个对象的constructor属性确切地说并不是存在这个对象上面的; 而是存在这个对象的原型上(如果是多级继承需手动修改原型的constructor属性),我们可用下面的代码来解释一下:
const F = function() {};
// 当我们定义一个函数的时候,这个函数的prototype属性上面的constructor属性指向自己本身
F.prototype.constructor === F; // true
对JS的原始类型(string, number, boolean, null, undefined, symbol (new in ECMAScript 2015)),它们的constructor属性是只读的,不可修改:
(1).constructor = "something";
console.log((1).constructor); // 输出 ƒ Number() { [native code] }
如果真想改这些原始类型的constructor属性,也不是不可以:
Number.prototype.constructor = "number constructor";
(1).constructor = 1;
console.log((1).constructor); // 输出 number constructor
当然上面的方式不推荐
zhaosongzhi 发表于 2020-1-6 11:05
相信自己,加油!
小公举 发表于 2020-1-6 11:11
感谢楼主的分享 天天开心 笑口常开
ruoquan 发表于 2020-1-6 21:18
黑马程序员,用爱成就每一位学员
zhaosongzhi 发表于 2020-1-6 11:05
相信自己,加油!
小公举 发表于 2020-1-6 11:11
感谢楼主的分享 天天开心 笑口常开
你不爱我 发表于 2020-1-6 20:48
加油加油6666666666666
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
举个栗子 发表于 2020-1-6 21:09
黑马程序员,西安校区威武
你不爱我 发表于 2020-1-6 20:48
加油加油6666666666666
王锦 发表于 2020-1-6 11:41
666666666666666
dendi 发表于 2020-1-6 20:37
厉害了6666666666666666
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
举个栗子 发表于 2020-1-6 21:09
黑马程序员,西安校区威武
王锦 发表于 2020-1-6 11:41
666666666666666
王微 发表于 2020-1-6 18:28
学习到很多
孙丽 发表于 2020-1-6 18:34
6666666666
王锦 发表于 2020-1-6 11:41
666666666666666
九月丫 发表于 2020-1-6 11:37
干货多来点,哈哈
lzq123 发表于 2020-1-6 11:31
6666666666666666666666666666
你不爱我 发表于 2020-1-6 20:48
加油加油6666666666666
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
zhaosongzhi 发表于 2020-1-6 11:05
相信自己,加油!
小公举 发表于 2020-1-6 11:11
感谢楼主的分享 天天开心 笑口常开
你不爱我 发表于 2020-1-6 20:48
加油加油6666666666666
半个程序员 发表于 2020-1-6 20:59
黑马程序员,用爱成就每一位学员
王微 发表于 2020-1-6 18:28
学习到很多
孙丽 发表于 2020-1-6 18:34
6666666666
王锦 发表于 2020-1-6 11:41
666666666666666
霍尔 发表于 2020-1-6 11:40
棒棒的!加油
王锦 发表于 2020-1-6 11:41
666666666666666
王微 发表于 2020-1-6 18:28
学习到很多
咨询部王丹 发表于 2020-1-7 09:53
多学,多练习,加油加油
欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) | 黑马程序员IT技术论坛 X3.2 |