`
xfan1982
  • 浏览: 12570 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

对于new,prototype,constructor的理解

阅读更多
每个object对象都有一个内在的原形属性(暂且称为_inner),
function对象是没有的,只是function的prototype属性很特殊

var A=function(name){this.name=name};
var obj=new A("xx");
1.先执行A,把里面的this用obj代替
2.把_inner引用指向A的prototype属性所指的地方

obj的constructor其实引用的是_inner的constructor
new对象后,如果A的prototype指向其他对象,obj的_inner是不会改变的

obj.xx 会先访问obj的xx属性,如果没有会再访问obj的_inner的xx,
同样_inner是object的话,会继续访问_inner的_inner
分享到:
评论
3 楼 xfan1982 2008-03-20  
谢谢,看来我的理解有点误差
2 楼 afcn0 2008-03-19  
"function对象是没有的",原型继承是不区分对象的,function是对象,自然有原型继承,继承的就是Function.prototype和Object.prototype
"constructor"不可靠,只不过是原型继承构造函数原型属性引用,但是原型属性"constructor"引用不可靠,所以不能说的太绝对
1 楼 ajaxgo 2008-03-19  
建议你去看看ecma262关于这段的描述,会更加清晰

相关推荐

    JavaScript中的prototype和constructor简明总结

    同理,对于自定义的构造函数,比如 var MyObject = function(){},我们也可以通过 MyObject.prototype 来添加方法,通过 new MyObject() 创建的实例将会有这些方法。 二、prototype 属性 prototype 属性是函数对象...

    JS:typeof instanceof constructor prototype区别

    例如,`Object.prototype.toString.call(new Date())`将返回`"[object Date]"`。 这种方法的优点在于,它不依赖于对象的`constructor`属性,也不受原型链的影响,能够准确地区分各种对象类型,包括原始数据类型和...

    javascript new后的constructor属性.docx

    ### JavaScript中的`new`操作与`constructor`属性详解 #### 一、`new`操作符的理解 在JavaScript中,`new`操作符被用于创建一个...了解并熟练掌握`constructor`属性的用法对于深入理解和使用JavaScript语言至关重要。

    深入分析js中的constructor和prototype

    理解这两个概念对于深入学习JavaScript至关重要。 首先,`constructor`是函数的一个属性,它指向创建该对象的函数,即构造函数。在上面的例子中,`function a(c)`是构造函数,`a.prototype.constructor`就指向了`a`...

    详解帮你彻底搞懂JS中的prototype、__proto__与constructor(图解)

    JavaScript中的`prototype`、`__proto__`和`constructor`是理解JavaScript面向对象编程的关键概念。这篇文章通过图解的方式深入浅出地解析了这三个概念之间的关系。 首先,`__proto__`属性是对象独有的,它指向对象...

    prototype小例子

    首先,我们理解`prototype`的基本作用。当我们在JavaScript中创建一个函数时,这个函数就自动获得了一个`prototype`属性。`prototype`对象包含了所有该函数实例会继承的方法。例如: ```javascript function Person...

    JavaScript中几个重要的属性(this、constructor、prototype)介绍

    理解`this`、`constructor`和`prototype`的使用,可以让我们更有效地编写JavaScript代码。例如,我们可以向内置对象的原型上添加方法来扩展它们的功能。向`Array.prototype`添加`min`方法就是一个很好的例子。然而,...

    图解prototype、proto和constructor的三角关系

    在JavaScript中,prototype、proto(或__proto__)和constructor是理解对象继承和构造函数之间关系的关键概念。首先,我们来看它们之间的三角关系。 **构造函数(Constructor)** 构造函数是一种特殊的函数,用于...

    JavaScript的prototype

    理解并熟练掌握`prototype`,对于编写高效、可维护的JavaScript代码至关重要。通过`prototype`,开发者可以构建复杂的应用程序架构,利用原型链实现方法的复用和对象的层次结构。在实际开发中,结合`Object.create()...

    了解JavaScript中的prototype (实例)

    JavaScript中的`prototype`是理解面向对象编程的关键概念之一。它是一种机制,允许对象共享属性和方法,从而实现代码复用。...理解`prototype`以及相关的原型链、继承和对象创建方式,对于深入学习JavaScript至关重要。

    prototype自己做的一个例子

    在这个“prototype自己做的一个例子”中,我们将深入理解`prototype`的工作原理,以及如何利用它来实现对象间的继承。 首先,`prototype`是每个函数(在JavaScript中,函数也是对象)内置的一个属性,这个属性引用...

    instanceof 和 prototype 关系

    Mammal.prototype.constructor = Mammal; let mammal = new Mammal(); console.log(mammal instanceof Mammal); // 输出 true console.log(mammal instanceof Animal); // 输出 true ``` 在这个例子中,`Mammal`...

    深化浅析JavaScript中的constructor_.docx

    需要注意的是,每个函数都有一个 `prototype` 属性,这个 `prototype` 属性的 `constructor` 属性指向这个函数本身。例如: ```javascript function Person(name, age) { this.name = name; this.age = age; } ...

    setter-on-constructor-prototype.rar_The Next

    在JavaScript编程中,"setter-on-constructor-prototype.rar_The Next"这个主题涉及到对象属性的访问和修改,尤其是关于构造函数原型链上的setter方法。在描述中提到的"Get the name of the next property of Result...

    prototype文件以及使用说明.rar

    `prototype`对象还有一个`constructor`属性,它指向创建当前原型的构造函数。这有助于追溯对象的来源。 8. **`Object.prototype`和`Function.prototype`** 所有对象的原型链最终都会指向`Object.prototype`,而...

    es6 prototype

    理解并掌握ES6的原型机制及其扩展对于JavaScript开发者至关重要,它可以帮助我们更好地利用语言特性,编写出高效、易于维护的代码。同时,使用如`XExtends Core v1.0.0`这样的库可以进一步提升开发效率,提供定制化...

    理解Javascript_11_constructor实现原理

    而对于Object.prototype来说,它的constructor属性实际上指向Function,这是因为Object是所有JavaScript对象的构造函数,包括原型链中的对象。 特殊处理Object的constructor属性是JavaScript设计的一部分,以确保...

    js遍历属性 以及 js prototype 和继承

    在JavaScript中,遍历属性、理解`prototype`和掌握继承机制是编程中不可或缺的基本技能。本文将深入探讨这些概念,并通过实例来加深理解。 首先,让我们来看如何遍历JavaScript对象的属性。JavaScript提供了多种...

    javascript new后的constructor属性

    在JavaScript编程中,`constructor`属性是一个非常重要的特性,通常与`new`关键字一起使用。当使用`new`关键字创建一个函数的实例时,实例对象会拥有...理解这一点对于深入掌握JavaScript面向对象编程是十分有必要的。

    prototype

    Dog.prototype.constructor = Dog; Dog.prototype.speak = function() { console.log("Woof!"); } var myDog = new Dog(); myDog.speak(); // 输出 "Woof!" ``` 在这个例子中,`Dog`通过`Object.create()`继承了`...

Global site tag (gtag.js) - Google Analytics