博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JavaScript】动态原型模式创建对象 ||为何不能用字面量创建原型对象?
阅读量:6037 次
发布时间:2019-06-20

本文共 1661 字,大约阅读时间需要 5 分钟。

var proto = "";    function Person(name, age, job) {        this.name = name;        this.age = age;        this.job = job;        if (typeof this.sayname != 'function') {            //这里不能使用字面量创建原型对象            //Person.prototype.sayname = function() {            //    console.log("name = " + this.name);            //   };            proto = Person.prototype;//没有经过字面量重写的原型对象            //假如使用字面量创建原型对象             Person.prototype =            {                sayname: function() {                    console.log("Name:" + this.name);                }            }            console.log(proto == Person.prototype)//false 说明Person原型对象已被重写改变        }    }    var person = new Person("Jack", 25, 'Programmer');    console.log(person.__proto__ == proto);//true 实例对象的__proto__指向原先的原型对象,而不是被字面量重写的原型对象    person.sayname();//undefined 没有新原型对象的方法
在已经创建了实例的情况再用字面量重写原型,那么就会切断现有实例与新原型之间的联系,以上说的换个写法就如下:
function Person() { };        var proto = Person.prototype;        var person = new Person;//实例对象在前        Person.prototype =        {            name: "Jack",            sayname: function() {                console.log("Name:" + this.name);            }        }        console.log(Person.prototype.isPrototypeOf(person)); //false 新原型不在person对象原型链上        console.log(proto.isPrototypeOf(person)); //true 原先的原型对象在person对象原型链上

  如果要实现为已经创建的实例对象添加方法,可以这样写:

function Person() { }        var person = new Person();//实例对象在前        Person.prototype.name = 'Jack';        Person.prototype.sayName = function() {            console.log(this.name);        }        person.sayName();//Jack

  这样做就不是重新声明一个原型对象,而是对原来的原型对象进行扩展

转载于:https://www.cnblogs.com/bloghxr/p/4538051.html

你可能感兴趣的文章
Windows线程的同步与互斥
查看>>
C#进阶系列——MEF实现设计上的“松耦合”(四):构造函数注入
查看>>
AngularJs ng-change事件/指令(转)
查看>>
linux系统下安装两个或多个tomcat
查看>>
ProtoBuffer 简单例子
查看>>
iOS多线程开发系列之(一)NSThread
查看>>
微信小程序初体验(上)- 腾讯ISUX社交用户体验设计成员出品
查看>>
SAP WM Physical Inventory Method ST & PZ
查看>>
一次快速的数据迁移感悟
查看>>
MySQL修改提示符
查看>>
《ELK Stack权威指南(第2版)》一3.6 Java日志
查看>>
C++流的streambuf详解及TCP流的实现
查看>>
《量化金融R语言初级教程》一2.5 协方差矩阵中的噪声
查看>>
mysql到elasticsearch数据迁移踩坑实践-Ali0th
查看>>
Python轻量级数据分析库DaPy
查看>>
beetl 和 shrio 结合
查看>>
相对/绝对路径,cd命令,mkdir/rmdir命令,rm命令
查看>>
tomcat中web.xml各配置项的意义
查看>>
Nodejs学习笔记(二):《node.js开发指南》代码中需要注意的几点
查看>>
Ztree异步加载自动展开节点
查看>>