gpt4 book ai didi

javascript - 第一个 'for' 在 'inheritance' Typescript 代码中做什么?

转载 作者:行者123 更新时间:2023-11-28 06:40:01 25 4
gpt4 key购买 nike

我正在阅读typescript page在“继承”部分我找到了这个函数:

var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};

当我读到这一行时:

for (var p in b)...

我有一个问题:这个循环到底做了什么?

我试图理解这一点并改变:

for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];

for (var p in b){
console.log(p);
if (b.hasOwnProperty(p)) d[p] = b[p];
}

因为我想知道p的值,但是控制台没有显示任何内容!

起初我以为这个 forbs 属性复制到 d。但我现在不确定,因为我认为这个循环没有执行任何迭代。

我不明白这个for循环。有人可以帮助我吗?
到目前为止,我认为 for 对于该代码来说毫无用处,但我想知道的想法。

这是我的完整代码:

var __extends = (this && this.__extends) || function (d, b) {
for (var p in b){
console.log("iteration");
console.log(p);
if (b.hasOwnProperty(p)) d[p] = b[p];
}
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());
};
var Animal = (function () {
function Animal(name) {
this.name = name;
}
Animal.prototype.move = function (meters) {
alert(this.name + " moved " + meters + "m.");
};
return Animal;
})();
var Snake = (function (_super) {
__extends(Snake, _super);
function Snake(name) {
_super.call(this, name);
}
Snake.prototype.move = function () {
alert("Slithering...");
_super.prototype.move.call(this, 5);
};
return Snake;
})(Animal);
var Horse = (function (_super) {
__extends(Horse, _super);
function Horse(name) {
_super.call(this, name);
}
Horse.prototype.move = function () {
alert("Galloping...");
_super.prototype.move.call(this, 45);
};


return Horse;
})(Animal);
var sam = new Snake("Sammy the Python");
var tom = new Horse("Tommy the Palomino");
sam.move();
tom.move(34);

我在控制台中没有看到任何内容。

最佳答案

稍微去混淆可能会让它变得更加明显。

for (var propertyName in objectToExtend){
if (objectToExtend.hasOwnProperty(properyName)) {
targetObject[propertyName] = objectToExtend[propertyName];
}

因此,它将属性值从第一个参数复制到第二个参数,但前提是这些属性实际上是在第一个参数本身上定义的:此循环将忽略第一个参数原型(prototype)上定义的任何内容。

关于javascript - 第一个 'for' 在 'inheritance' Typescript 代码中做什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33923465/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com