问答中心分类: JAVASCRIPTAngularJS中范围原型/原型遗传的细微差别是什么?
0
匿名用户 提问 1月 前

这个API参考范围页面说:

A范围可以从父范围继承。

这个开发者指南范围页面说:

作用域(原型)从其父作用域继承属性。

  • 那么,子作用域是否总是从父作用域继承?
  • 有例外吗?
  • 当它确实继承时,是否总是正常的JavaScript原型继承?
2 Answers
0
Scott Driscoll 回答 1月 前

我决不想与马克的答案竞争,只想突出这篇文章,作为一个新手,这篇文章最终让所有东西都点击了Javascript继承及其原型链.
只有属性读取搜索原型链,而不是写入。所以当你设定

myObject.prop = '123';

它不会查找链,但当你设置

myObject.myThing.prop = '123';

在写操作中有一个微妙的读操作它试图在写文章之前先查找神话。这就是为什么要写object。子对象的属性从父对象获取。

moljac024 回复 1月 前

虽然这是一个非常简单的概念,但可能不是很明显,因为我相信,很多人都忽略了它。说得好。

Stephane 回复 1月 前

非常好的评论。我拿走了,非对象属性的分辨率不涉及读取,而对象属性的分辨率涉及读取。

Jonathan. 回复 1月 前

为什么?房地产写作不在原型链上的动机是什么?这看起来很疯狂。。。

tylik 回复 1月 前

如果您添加一个真正简单的示例,那就太好了。

Bergi 回复 1月 前

请注意在原型链中搜索二传手. 如果未找到任何内容,则会在接收器上创建一个属性。

0
tylik 回答 1月 前

我想在@Scott Driscoll answer中添加一个javascript原型继承的示例。我们将使用对象的经典继承模式。create(),它是EcmaScript 5规范的一部分。
首先,我们创建“父”对象函数

function Parent(){

}

然后将原型添加到“父”对象函数中

Parent.prototype = {
 primitive : 1,
 object : {
    one : 1
   }
}

创建“子”对象函数

function Child(){

}

分配子原型(使子原型从父原型继承)

Child.prototype = Object.create(Parent.prototype);

分配适当的“子”原型构造函数

Child.prototype.constructor = Child;

将方法“changeProps”添加到子原型中,这将重写子对象中的“primitive”属性值,并更改子对象和父对象中的“object.one”值

Child.prototype.changeProps = function(){
    this.primitive = 2;
    this.object.one = 2;
};

初始化父(dad)和子(son)对象。

var dad = new Parent();
var son = new Child();

调用子(子)changeProps方法

son.changeProps();

检查结果。
父基元属性未更改

console.log(dad.primitive); /* 1 */

子基元属性已更改(重写)

console.log(son.primitive); /* 2 */

父对象和子对象。一个属性已更改

console.log(dad.object.one); /* 2 */
console.log(son.object.one); /* 2 */

此处为工作示例http://jsbin.com/xexurukiso/1/edit/
有关对象的详细信息。在此处创建https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/Object/create

Jacob Stamm 回复 1月 前

关于这三个关于原型继承的答案,我最喜欢的部分是答案本身是相互继承的