function myFunction() {};
myFunction.prototype.foo = "bar";
var myFuncInstance = new myFunction();
console.log('myFunction.foo: ' + myFunction.foo); // Prints undefined
console.log('myFuncInstance.foo: ' + myFuncInstance.foo); // Prints bar
为什么myFunction.foo
在这里打印undefined
?我已经将foo属性设置为myFunction.prototype.foo = "bar"
。
答案 0 :(得分:0)
在这种情况下,myFunc
不是对象,它表示对象的 class 。这意味着您可以使用new
关键字来创建与该类的prototype
具有相同属性的对象。这并不意味着您可以在函数本身上获得一系列新的属性。
按照您的示例,这将起作用:
function myFunction() {};
myFunction.prototype.foo = "bar";
var myFuncInstance = new myFunction();
console.log('myFunction.prototype.foo: ' + myFunction.prototype.foo);
console.log('myFuncInstance.foo: ' + myFuncInstance.foo);
答案 1 :(得分:0)
当您在对象的prototype
中声明某个变量时,您会将值附加到该对象的任何实例,因此定义在prototype
中的值将可以通过实例访问,因此在调用时myFunction.foo
尝试将.foo
变量作为静态变量调用,这是因为myFunction是构造函数,而不是该构造函数的实例,因此当您调用myFuncInstance.foo
myFuncInstance
是实例时已经存在,因此您可以访问.foo
变量,因为它是在其“原型”中定义的。
因此,您何时真正需要访问此myFunction.foo
,您应该将其定义为
function myFunction() {};
myFunction.foo = 'static bar'; // it can be accessed without instance
因此,当您致电myFunctionInstance.foo
时,应将其定义为
function myFunction() {};
myFunction.prototype.foo = 'instance bar'; // it can be accessed with instance
var myFunctionInstance = new myFunction();
myFunctionInstance.foo; // will print 'instance bar'
答案 2 :(得分:0)
我们都知道,JavaScript 对象 继承 属性和方法来自原型 >。
在第二个log
中,您有一个适当的实例( Prototype Inheritance )
;在第一个日志中,您正在访问function property
,而没有任何实例(直接使用函数名)。
您将需要实例(myFuncInstance)
来访问属性,而不是function
本身。
答案 3 :(得分:0)
使用FROM nvidia/cuda:9.0-cudnn7-runtime-centos7
ARG TF_VERSION=1.9.0
RUN yum install -y \
yum-plugin-ovl \
libgomp \
ca-certificates \
zip \
unzip \
curl \
&& \
yum clean all
WORKDIR /usr/
RUN curl -sSL -o /usr/nccl_2.2.13-1-cuda9.0_x86_64.tgz http://some-of-my-net-disk/tensorflow-serving/lib/nccl_2.2.13-1-cuda9.0_x86_64.tgz && \ # Change your way to get nccl library here
tar -xvf nccl_2.2.13-1-cuda9.0_x86_64.tgz &&\
rm -f nccl_2.2.13-1-cuda9.0_x86_64.tgz
ENV LD_LIBRARY_PATH /usr/nccl_2.2.13-1+cuda9.0_x86_64/lib/:${LD_LIBRARY_PATH}
# Change your way to get tensorflow_model_server here
WORKDIR /serving
RUN curl -sSL -o /usr/local/bin/tensorflow_model_server http://some-of-my-net-disk/tensorflow-serving/bin/tf-serving-${TF_VERSION}/tensorflow_model_server_gpu-centos &&\
chmod u+x /usr/local/bin/tensorflow_model_server
获取一个对象的属性时,每个对象都有一个原型。
首先,它将找到自身的属性,如果没有获得目标属性,它将找到其原型的属性,如果仍然没有获得目标属性,它将继续找到其原型的属性的属性。这些之后,这种情况就变得容易了。
使用.
后,您将获得一个实例new
,而使用myFuncInstance
时,由于本身没有名为myFuncInstance.foo
的属性,它将获得属性{{ 1}}来自其构造函数foo
的原型。
但是,当使用foo
时,myFunction
还没有属性调用myFunction.foo
,它将找到其原型myFunction
,也找不到{{1 }},因此找到foo
的原型Function.prototype
,它仍然找不到,所以找到foo
的原型Function.prototype
,所有原型链都找不到找到Object.prototype
,因此是Object.prototype
。