运算符混淆的Javascript实例

运算符混淆的Javascript实例,javascript,Javascript,我读过Javascript的instanceof操作符,想测试一下。我编写了以下代码: function first(){}; first.prototype.hello=函数hello(){ console.log(“你好”); } var second={}; second.prototype=Object.create(first.prototype); console.log(第一个的第二个实例)//应该输出true 第二,你好 第二个原型被分配了一个新对象 不,这部分错了。您正在创建

我读过Javascript的
instanceof
操作符,想测试一下。我编写了以下代码:

function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second={};
second.prototype=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true
第二,你好
第二个原型被分配了一个新对象

不,这部分错了。您正在创建一个名为
“prototype”
的属性,但这并不意味着它是对象的实际原型

var second = {};
second.prototype = ...
相当于

var second = { "prototype": ... };
但这与遗传无关

几乎唯一使用名为
“prototype”
的属性的地方就是构造函数(比如你的
首先是
),即使这样,它也不会被用作函数本身的原型;它被用作以后从
newthatfunction()
创建的任何实例的原型

你能做的就是

var second = new first;
// What this does:
//   - gets the object from first.prototype
//   - creates a new derived object, like Object.create(first.prototype)
//   - calls first(), passing the new object as 'this',
//      like first.call(Object.create(first.prototype))
//   - assigns the object returned from first() to second
//      (if first doesn't return an object, it automatically uses the new object created in step 2 instead)
或者(基本相当,但不会先调用

第二个原型被分配了一个新对象

不,这部分错了。您正在创建一个名为
“prototype”
的属性,但这并不意味着它是对象的实际原型

var second = {};
second.prototype = ...
相当于

var second = { "prototype": ... };
但这与遗传无关

几乎唯一使用名为
“prototype”
的属性的地方就是构造函数(比如你的
首先是
),即使这样,它也不会被用作函数本身的原型;它被用作以后从
newthatfunction()
创建的任何实例的原型

你能做的就是

var second = new first;
// What this does:
//   - gets the object from first.prototype
//   - creates a new derived object, like Object.create(first.prototype)
//   - calls first(), passing the new object as 'this',
//      like first.call(Object.create(first.prototype))
//   - assigns the object returned from first() to second
//      (if first doesn't return an object, it automatically uses the new object created in step 2 instead)
或者(基本相当,但不会先调用


不要使用
second.prototype
,而是使用
second

我已经编辑了你的代码

function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true

第二,你好而不是
秒。原型
,使用

我已经编辑了你的代码

function first(){};
first.prototype.hello=函数hello(){
console.log(“你好”);
}
var second=Object.create(first.prototype);
console.log(第一个的第二个实例)//应该输出true
第二,你好
Object.create()
需要存储在
second
变量中,而不是
second.prototype
中。它不返回对象原型,而是返回整个对象本身

 var second = {}
 second = Object.create (first.prototype)
Object.create()
需要存储在
second
变量中,而不是
second.prototype
中。它不返回对象原型,而是返回整个对象本身

 var second = {}
 second = Object.create (first.prototype)

second=newfirst()有什么问题吗?
——这不是你想要实现的吗?这些模式似乎试图将
第一个
子类化为类
第二个
——但您“做得不对”™我不认为构造函数调用版本有什么问题,但这不是一个实用的代码,它的编写只是为了测试我学到的东西。关于图像,请将它们限制在真正需要图像的东西上。如果您只是在问题中写下“
second instanceof first
返回false,而
second.hello()
产生
Uncaught TypeError:second.hello不是函数
”,并在代码中指出相应的行,
second=new first()有什么问题
-这不是你想要实现的目标吗?这些模式似乎试图将
第一个
子类化为类
第二个
——但您“做得不对”™我不认为构造函数调用版本有什么问题,但这不是一个实用的代码,它的编写只是为了测试我学到的东西。关于图像,请将它们限制在真正需要图像的东西上。如果您只是在问题中写道“
second instanceof first
返回false,而
second.hello()
产生
未捕获类型错误:second.hello不是函数”,并在代码中指出了相应的行。因此,实际原型不能用表达式
name.prototype
?@BranTran引用,这是正确的。你可以用它。只是对以后可能读到这篇文章的人说:我的错误是没有理解
原型
产权的含义。它(默认情况下)仅存在于函数中,是指向其他对象的链接。将其用于不可调用对象的属性与仅在其上添加新属性相同(没有任何特殊意义)。谢谢大家的支持!因此,实际原型不能用表达式
name.prototype
?@BranTran引用,这是正确的。你可以用它。只是对以后可能读到这篇文章的人说:我的错误是没有理解
原型
产权的含义。它(默认情况下)仅存在于函数中,是指向其他对象的链接。将其用于不可调用对象的属性与仅在其上添加新属性相同(没有任何特殊意义)。谢谢大家的支持!我也试过这个,当它起作用时,我更加困惑,我也试过这个,当它起作用时,我更加困惑