Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用javascript原型继承

使用javascript原型继承
EN

Stack Overflow用户
提问于 2012-06-18 16:46:01
回答 2查看 140关注 0票数 0

为什么这样行得通……

代码语言:javascript
运行
AI代码解释
复制
function Person(name) {
   this.name = name;
  }


Person.prototype.speak =  function() {
   alert(this.name);
}


var person = new Person("fred");

person.speak();

但不是这个..

代码语言:javascript
运行
AI代码解释
复制
function Person(name) {
   this.name = name;
        speak =  function() {
   alert(this.name);
}


var person = new Person("fred");

person.speak();

我不理解继承是如何工作的,也不理解javascript的“原型链”。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-06-18 16:47:58

代码语言:javascript
运行
AI代码解释
复制
function Person(name) {
   this.name = name;
        speak =  function() {
   alert(this.name);
}

应该是

代码语言:javascript
运行
AI代码解释
复制
function Person(name) {
   this.name = name;
   this.speak = function () {
      alert(this.name);
   };
}
票数 4
EN

Stack Overflow用户

发布于 2012-06-18 16:50:39

实际上这是你不理解的变量作用域。

代码语言:javascript
运行
AI代码解释
复制
function Person(name) {
  this.name = name;

  speak = function() {
    alert(this.name);
  }
}

通过在这里的speak = ...之前省略var,您已经创建了一个名为speak的全局变量,而不是Person作用域内的变量。在浏览器中,全局变量附加到全局对象window,因此您的代码等同于:

代码语言:javascript
运行
AI代码解释
复制
function Person( name ) {
  this.name = name;

  window.speak = function() { alert( this.name ); }

}

Douglas Crockford写了关于原型继承中的变量作用域的some related material,你会发现这对你很有启发。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11087374

复制
相关文章
如果使用 JavaScript 原型实现继承
在这篇文章中,我们将讨论原型以及如何在 JS 中使用它们进行继承。我们还将会看到原型方法与基于类的继承有何不同。
前端小智@大迁世界
2020/05/12
7130
如果使用 JavaScript 原型实现继承
javascript原型链继承
function user(names,age,jobs){ if(this instanceof user){ this.names=name; this.age=age; this.jobs=jobs; } else{ return new user(name,age,jobs) } } admin.prototype=new user(); function admin(namek,pass){ user.call(this,'jcomey','28','de
2021/11/08
6240
JavaScript原型与继承
对于使用过基于类的语言 (如 Java 或 C++) 的开发人员来说,JavaScript 有点令人困惑,因为它是动态的,并且本身不提供一个 class 实现。(在 ES2015/ES6 中引入了 class 关键字,但那只是语法糖,JavaScript 仍然是基于原型的)。
用户1428723
2020/08/06
5540
JavaScript原型链继承
在JavaScript中,每个对象都有一个原型(prototype),原型本身也是一个对象。当我们访问一个对象的属性或方法时,如果该对象本身没有该属性或方法,JavaScript会自动去它的原型对象中查找。如果原型对象也没有找到,JavaScript会继续在原型对象的原型上查找,这样形成了一个原型链。
堕落飞鸟
2023/05/17
4170
Javascript 组合继承 原型链继承 寄生继承
该继承通过构造函数继承原型链的方法和父类的属性,但该方法会有两次调用父类,第一次是在继承原型链,第二次在继承属性。
菜的黑人牙膏
2019/01/21
1.1K0
JavaScript继承与原型链
当谈到继承时,JavaScript 只有一种结构:对象。每个实例对象(object)都有一个私有属性(称之为 __proto__)指向它的构造函数的原型对象(prototype)。该原型对象也有一个自己的原型对象(__proto__),层层向上直到一个对象的原型对象为 null。根据定义,null 没有原型,并作为这个原型链中的最后一个环节。
Andromeda
2023/10/21
1810
JavaScript继承与原型链
【说站】javascript原型链继承的使用
2、原型链继承非常适合不需要单独创建构造函数的场合,当仍然需要在对象之间共享信息时。
很酷的站长
2022/11/23
3350
【说站】javascript原型链继承的使用
JavaScript继承和原型链
JS在加载构造函数时,会在内存中生成一个对象,这个对象称为函数的原型对象(prototype)。
前端航航
2022/11/11
4610
JavaScript原型链与继承
只要是对象,一定有原型对象,就是说只要这个东西是个对象,那么一定有proto属性。(错的)
用户7043603
2022/02/26
1.6K0
JavaScript原型链继承与盗用构造函数继承
继承这个词比较容易理解,很多东西我们没有,但是我们的父亲有,我们就可以拿我们父亲的来用。这个就是继承。我们直接上干货。
大熊G
2022/11/14
4480
动图学 JavaScript 之:原型继承
你是否曾思考为什么我们能使用 JS 中的一些内置属性和方法,比如 .length,.split(),.join()?我们并没有显式地声明它们,那么究竟它们从哪里来的呢?可不要说什么“那是 JS 中的魔法!”。其实这些都因为一个叫做 原型继承(prototypal inheritance) 的东西。它太棒啦,你平时也经常会用到,只不过可能没有注意!
savokiss
2020/02/18
5870
动图学 JavaScript 之:原型继承
关于 JavaScript 原型和继承的思考
闭包和原型 prototype 工厂函数 function user(name){ var newUser = {}; newUser.name = name; return newUser; } 复制代码 构造函数 //使用new的是 构造函数 function User(name,age,gender){ this.name = name ; this.age = age ; this.gender = gender ; } var whh = new
西南_张家辉
2021/02/02
3720
Javascript的原型继承,说清楚
     一直以来对Javascript的原型、原型链、继承等东西都只是会用和了解,但没有深入去理解这门语言关于继承这方面的本质和特点。闲暇之余做的理解和总结,欢迎各位朋友一起讨论。 本文本主要从两段代码的区别说明继承: 一、第一段代码: function Parent(){ this.Name='parent'; } Parent.prototype.getName = function(){ return this.Name; } Parent.prototype.Share = [
sam dragon
2018/01/17
5540
Javascript的原型继承,说清楚
对Javascript 类、原型链、继承的理解
  和其他面向对象的语言(如Java)不同,Javascript语言对类的实现和继承的实现没有标准的定义,而是将这些交给了程序员,让程序员更加灵活地(当然刚开始也更加头疼)去定义类,实现继承。(以下不讨论ES6中利用class、extends关键字来实现类和继承;实质上,ES6中的class、extends关键字是利用语法糖实现的)
smy
2019/02/13
6950
对Javascript 类、原型链、继承的理解
【说站】javascript原型链继承的实现
以上就是javascript原型链继承的实现,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
3810
《现代Javascript高级教程》JavaScript中的原型与继承
JavaScript是一门支持面向对象编程的语言,它的函数是第一公民,同时也拥有类的概念。不同于传统的基于类的继承,JavaScript的类和继承是基于原型链模型的。在ES2015/ES6中引入了class关键字,但其本质仍然是基于原型链的语法糖。
linwu
2023/07/27
2680
《现代Javascript高级教程》JavaScript中的原型与继承
原型、原型链和原型继承
上一小节是从继承的层面,介绍原型继承,但是没有具体说什么是原型。只提到构造函数的 prototype, 那么 prototype 是什么?它的作用又是什么?
玖柒的小窝
2021/11/02
7830
原型、原型链和原型继承
【说站】JavaScript原型继承的实现方式
1、定义新的构造函数,并在内部使用call()调用希望继承的结构函数,绑定this。
很酷的站长
2022/11/24
2610
【说站】JavaScript原型继承的实现方式
一图弄清JavaScript的继承与原型
其中Function、Object是JavaScript的内建类,JavaScript的类实际上是一个function
我不是码神
2022/07/28
1880
【说站】javascript原型式继承如何理解
以上就是javascript原型式继承的理解,希望对大家有所帮助。更多Javascript学习指路:Javascript
很酷的站长
2022/11/23
3080

相似问题

原型继承javascript

16

使用原型的JavaScript继承

23

Javascript原型继承

30

Javascript原型继承

23

javascript原型继承

60
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档