JScript/ASP prototype doesn't work from an include?

J

Jonathan Dodds

I have two files in an ASP project I created with VI 6.0: circle.inc and
default.asp.

circle.inc:

// circle.inc

function Circle (xPoint, yPoint, radius) {
this.x = xPoint; // The x component of the center of the circle.
this.y = yPoint; // The y component of the center of the circle.
this.r = radius; // The radius of the circle.
}
Circle.prototype.pi = Math.PI;
Circle.prototype.area = function () {
return this.pi * this.r * this.r;
}



default.asp:

<%@ language="jscript" %>
<html>
<head>
<script language="javascript" runat="server" src="circle.inc"></script>
</head>
<body>
<%
var aCircle = new Circle(5, 11, 99);
for (var x in aCircle)
{
Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
")<br>");
}
%>
</body>
</html>



I expect output that look like this:

area = function () { return this.pi * this.r * this.r; } (function)
pi = 3.141592653589793 (number)
x = 5 (number)
y = 11 (number)
r = 99 (number)

This works when the circle constructor and prototype are in the default.asp
file but when I move the code to the circle.inc include file I lose the
members that are added by the prototype. i.e.:

x = 5 (number)
y = 11 (number)
r = 99 (number)

When I use the include file it finds the constructor but loses the
prototype? What the heck!?

I tried using a #include directive instead of the script element. It made no
difference. I searched the MSDN to see if there was some mention of this
issue. I didn't find anything relevant.

Is this a bug or am I including this file incorrectly?

Thanks.
 
J

Jason Brown [MSFT]

don't use a server-side script block to include the code. use an actual SSI

<!--#include virtual="/path/here.inc"-->

code in <% %> delimiters and code in <script> blocks execute in different
contexts, hence your problem here
 
A

Aaron [SQL Server MVP]

I believe you have been bitten by the "order matters" nature of <%%> and
<script> delimiters.

http://www.aspfaq.com/2045

You could try enclosing the inline code with <script> instead of <% or you
could use <% in the .inc file and use a standard <!--#include instead of the
script-tag style.

A
 
J

Jonathan Dodds

Thanks.

I tried both ways: two <script> blocks and two sets of <% %> blocks. As long
as I match, the code works correctly.


Jason Brown said:
don't use a server-side script block to include the code. use an actual SSI

<!--#include virtual="/path/here.inc"-->

code in <% %> delimiters and code in <script> blocks execute in different
contexts, hence your problem here


--
Jason Brown
Microsoft GTSC, IIS

This posting is provided "AS IS" with no warranties, and confers no rights.


Jonathan Dodds said:
I have two files in an ASP project I created with VI 6.0: circle.inc and
default.asp.

circle.inc:

// circle.inc

function Circle (xPoint, yPoint, radius) {
this.x = xPoint; // The x component of the center of the circle.
this.y = yPoint; // The y component of the center of the circle.
this.r = radius; // The radius of the circle.
}
Circle.prototype.pi = Math.PI;
Circle.prototype.area = function () {
return this.pi * this.r * this.r;
}



default.asp:

<%@ language="jscript" %>
<html>
<head>
<script language="javascript" runat="server" src="circle.inc"></script>
</head>
<body>
<%
var aCircle = new Circle(5, 11, 99);
for (var x in aCircle)
{
Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
")<br>");
}
%>
</body>
</html>



I expect output that look like this:

area = function () { return this.pi * this.r * this.r; } (function)
pi = 3.141592653589793 (number)
x = 5 (number)
y = 11 (number)
r = 99 (number)

This works when the circle constructor and prototype are in the
default.asp
file but when I move the code to the circle.inc include file I lose the
members that are added by the prototype. i.e.:

x = 5 (number)
y = 11 (number)
r = 99 (number)

When I use the include file it finds the constructor but loses the
prototype? What the heck!?

I tried using a #include directive instead of the script element. It made
no
difference. I searched the MSDN to see if there was some mention of this
issue. I didn't find anything relevant.

Is this a bug or am I including this file incorrectly?

Thanks.
 
J

Jonathan Dodds

Thanks Aaron. That is exactly the problem.

Aaron said:
I believe you have been bitten by the "order matters" nature of <%%> and
<script> delimiters.

http://www.aspfaq.com/2045

You could try enclosing the inline code with <script> instead of <% or you
could use <% in the .inc file and use a standard <!--#include instead of the
script-tag style.

A


I have two files in an ASP project I created with VI 6.0: circle.inc and
default.asp.

circle.inc:

// circle.inc

function Circle (xPoint, yPoint, radius) {
this.x = xPoint; // The x component of the center of the circle.
this.y = yPoint; // The y component of the center of the circle.
this.r = radius; // The radius of the circle.
}
Circle.prototype.pi = Math.PI;
Circle.prototype.area = function () {
return this.pi * this.r * this.r;
}



default.asp:

<%@ language="jscript" %>
<html>
<head>
<script language="javascript" runat="server" src="circle.inc"></script>
</head>
<body>
<%
var aCircle = new Circle(5, 11, 99);
for (var x in aCircle)
{
Response.Write(x + " = " + aCircle[x] + " (" + typeof(aCircle[x]) +
")<br>");
}
%>
</body>
</html>



I expect output that look like this:

area = function () { return this.pi * this.r * this.r; } (function)
pi = 3.141592653589793 (number)
x = 5 (number)
y = 11 (number)
r = 99 (number)

This works when the circle constructor and prototype are in the default.asp
file but when I move the code to the circle.inc include file I lose the
members that are added by the prototype. i.e.:

x = 5 (number)
y = 11 (number)
r = 99 (number)

When I use the include file it finds the constructor but loses the
prototype? What the heck!?

I tried using a #include directive instead of the script element. It made no
difference. I searched the MSDN to see if there was some mention of this
issue. I didn't find anything relevant.

Is this a bug or am I including this file incorrectly?

Thanks.
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

Forum statistics

Threads
473,754
Messages
2,569,525
Members
44,997
Latest member
mileyka

Latest Threads

Top