【javascript基础篇】——面向对象动态加载属性和方法

来源:互联网 发布:火狐视频下载php 编辑:程序博客网 时间:2024/06/06 01:11

【前言】

    其实在总结javascript的原型模式的块的时候,我不是非常清楚用来做什么,再一次的回顾的时候感觉有了一点深的印象,个人觉得在javascript的面向对象已经继承的过程我们肯定会免不了使用它的,下面介绍一下非常基本的使用方式!

【内容】

 1.动态添加属性

①.实例化对象之后动态添加

function Person(name,age){    this.name=name;    this.age=age;}var p1 = new Person('张三', '20');p1.sex='男';alert(p1.name+":"+p1.age+" ,"+p1.sex)


②.使用原型模型动态添加

   function Person(name,age){    this.name=name;    this.age=age;}var p1 = new Person('张三', '20');//使用原型模型添加属性Person.prototype.sex='男'; //也可以换成:p1.constructor.prototype.sex='男'alert(p1.name+":"+p1.age+" ,"+p1.sex)

 2.动态添加方法

①使用实例化对象动态添加

function Person(name,age){    this.name=name;    this.age = age;    this.setname= function () {        return 'helloWorld';    }}var p1 = new Person('张三', '20');//关键的地方在于这里:p1使用的是隐藏的_proto_属性。p1.setname = function () {return "how are you" }alert(p1.name + ":" + p1.age +",   "+ p1.setname());

②使用原型模式创建

function Person(name,age){    this.name=name;    this.age = age;    this.setname= function () {        return 'helloWorld';    }}var p1 = new Person('张三', '20');//关键的地方在于这里:prototype的使用需要用构造器函数对象Person.prototype.setname = function () {return "how are you" }  alert(p1.name + ":" + p1.age +",   "+ p1.setname());

其中两种的方式的区别主要是由于_proto_和prototype,其中_proto_是一种隐藏的实例化对象属性,prototype是函数对象属性,其中也可以存放对象。

prototype和_proto_区别:
prototype是某一个构造器函数的属性,而_proto_是某一个实例对象的属性。

比如在代码:

alert(typeof p1._proto_);返回结果是object,但是必须在ECM5中,在一些浏览器中不适用。alert(typeof p1.constructor.prototype);返回的结果的是objec。alert(typeof p1.prototype);返回的结果是undefinedalert(typeof p1.constructor._proto_);返回的结果是undefined

 3.注意事项

    在prototype的使用过程中发现其实在动态添加这些东西的时候,在重写某一个对象的prototype的时候,需要重置相应的constructor属性。如下:

Person.prototype.constructor=Person,否则可能会出现意向不到的结果。

【总结】

     其实这都是一些接触语法之类的东西,希望对你学习javascript语言有帮助!本篇还推荐我关于javascript的基础的相关文章如下:

  1.【javascript基础篇】——简单对象和面向对象

   2.【Javascript基础篇】—--原型对象(prototype)的三个常用方法

   3.【JavaScript】——面向对象之原型优化

1 0