prototype-关于javascript原型对象的一些问题

问题描述

关于javascript原型对象的一些问题

如下一个原型对象:

 function Box(){}
 Box.prototype.name = 'Programmer';
 Box.prototype.method = function(){
     return this.name;
 };

 var box = new Box();

1、box对象的原型属性__proto__访问的是原型对象prototype还是原型对象的constructor属性?
2、通过box.method()可以访问原型对象的method方法,通过box.__proto__.method()也可以访问,这两种方式的区别是什么?访问原型的属性和方法该用哪种方式?
3、构造函数Box的原型对象是Box.prototype吗?
4、原型对象存储在哪里?请细说一下详细的过程
5、实例对象的原型对象的__proto__指向哪里?如果存在这个对象,那么这个对象的__proto__又指向哪里?
6、构造函数Box的__proto__指向哪里?如果存在这个对象,那么这个对象的__proto__又指向哪里?

解决方案

  1. box.__proto__ == Box.prototype ; //true
  2. box.method = 12;
    box.method == 12;//true;
    box.__proto__.method == 12;//false;

box.__proto__.method = 1212;
box.method == 1212;//false;
box.method == 12;//true;
box.__proto__.method == 1212;//true
Box.prototype.method == 1212;//true

  1. 5. 6. 请查看下图:

解决方案二:

Javascript 对象原型
javascript中的 对象 和 原型
JavaScript的原型对象

解决方案三:

1、实例化对象box的__proto__访问的是原型对象的prototype,原型对象的constructor属性指向Box()。
2、box.method()方法和box.__proto__.method()都访问method()的方法,区别是,box.method()方法首先会在box的实例属性中访问method方法,如果找不到,再访问Box.prototype。访问原型的属性和方法用box.__proto__,但这个__proto__属性不是ECMAScript标准化的属性,不是所有浏览器都支持。ECMAScript5标准化的方法为Object.getPrototypeOf()。
3、对象Box的原型对象为Box.prototype。
4、这个我不知道。
5、这个是继承中原型链的概念,如果原型对象的__proto__中,即Box.prototype中包含一个(或多个)属性为另一个对象(父对象),而父对象又有原型对象,那么Box原型对象的__proto__属性指向父对象的原型。
6、我认为,JS中,Box的构造函数是通过函数来实现的,根据JS原则,函数的作用域是一个封闭的子作用域,不同实例化对象通过构造函数实例化的属性被隔离成一个个封闭的作用域,不能直接互相访问。而原型是在全局作用域下定义的,所有的实例化对象访问的都是同一份原型属性,所以,我认为构造函数Box没有__proto__属性。

时间: 2024-10-26 05:48:00

prototype-关于javascript原型对象的一些问题的相关文章

深入理解javascript构造函数和原型对象

 常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! 1 2 3 4 5 6 var gf = new Object(); gf.name = "tangwei"; gf.bar = "c++"; gf.sayWhat = function() {   console.log(this.name + "said:love you forever"); } 使用字面量创建

javascript 原型、原型链、对象复制等原理和示例分析(下)

原型 原型是 JavaScript 面向对象特性中重要的概念,也是大家太熟悉的概念.因为在绝大多 数的面向对象语言中,对象是基于类的(例如 Java 和 C++ ) ,对象是类实例化的结果.而在 JavaScript 语言中,没有类的概念 ① ,对象由对象实例化.打个比方来说,基于类的语言中类 就像一个模具,对象由这个模具浇注产生,而基于原型的语言中,原型就好像是一件艺术品 的原件,我们通过一台 100% 精确的机器把这个原件复制出很多份. 前面小节的例子中都没有涉及原型,仅仅通过构造函数和 n

javascript-关于JavaScript的原型对象的问题

问题描述 关于JavaScript的原型对象的问题 看书上关于对象直接量的一段描述是所有通过对象直接量创建的对象都有同一个原型对象,可以通过object.prototype获得对原型对象的引用,那么{x:1}的原型对象是什么? 解决方案 就是Object.prototype,可以通过Object.prototype扩充 比如 Object.prototype.fa=function(){ alert('1'); } var b={x:'k'}; b.fa();

举例说明JavaScript中的实例对象与原型对象_基础知识

首先声明:javascript中每个对象都有一个constructor属性和一个prototype属性.constructor指向对象的构造函数,prototype指向使用构造函数创建的对象实例的原型对象. function Person(){ } var person = new Person(); Person.prototype = { constructor : Person, name : 'zxs', age : 24, sayName : function(){alert(this

Javascript 学习笔记之 对象篇(二) : 原型对象_基础知识

Javascript 是唯一一个被广泛运用的原型式继承的语言,所以理解两种继承方式的差异是需要时间的. 第一个主要差异就是 Javascript 使用原型链来继承: function Foo() { this.value = 42; } Foo.prototype = { method: function() {} }; function Bar() {} 设置 Bar 的 prototype 为 Foo 的对象实例: Bar.prototype = new Foo(); Bar.prototy

图文详解JavaScript的原型对象及原型链_javascript技巧

对于新人来说,JavaScript的原型是一个很让人头疼的事情,一来prototype容易与__proto__混淆,二来它们之间的各种指向实在有些复杂,其实市面上已经有非常多的文章在尝试说清楚,有一张所谓很经典的图,上面画了各种线条,一会连接这个一会连接那个,说实话我自己看得就非常头晕,更谈不上完全理解了.所以我自己也想尝试一下,看看能不能把原型中的重要知识点拆分出来,用最简单的图表形式说清楚. 我们知道原型是一个对象,其他对象可以通过它实现属性继承.但是尼玛除了prototype,又有一个__

javascript中对象的定义、使用以及对象和原型链操作小结_javascript技巧

本文实例总结了javascript中对象的定义.使用以及对象和原型链操作.分享给大家供大家参考,具体如下: 1. 除了5种基本类型外,JS中剩下的就是对象 (1)对象的定义: 直接定义: var test={x:1,y:1} new方式创建: var test=new Object({x:1}) Object.create方式: var test=Object.create({x:1}) (2)对象上的赋值与取值 举例: var test={ x:1, y:2 } 方法一:可以通过test['x

深入理解javascript构造函数和原型对象_javascript技巧

常用的几种对象创建模式 使用new关键字创建 最基础的对象创建方式,无非就是和其他多数语言一样说的一样:没对象,你new一个呀! var gf = new Object(); gf.name = "tangwei"; gf.bar = "c++"; gf.sayWhat = function() { console.log(this.name + "said:love you forever"); } 使用字面量创建 这样似乎妥妥的了,但是宅寂的

JavaScript 自定义对象

原文:JavaScript 自定义对象 在Js中,除了Array.Date.Number等内置对象外,开发者可以通过Js代码创建自己的对象. 目录 1. 对象特性:描述对象的特性 2. 创建对象方式:对象直接量.new 构造函数.Object.create() 等三种方式 3. 序列化对象:序列化和反序列化对象 4. 面向对象编程:描述自定义对象的面向对象模拟:包含实例成员.静态成员等等 5. 继承:描述对象的继承特性.   1. 对象特性 ① 结构类似'字典' :对象的属性类似键/值对:属性的